2015-08-06 4 views
0

У меня странная проблема между симулятором и реальным пробегом в iPhone 6+ с NSDateFormatter в быстром. Я пытаюсь преобразовать строку в определенном формате, я получаю в JSON, чтобы NSDate со следующим расширением:борется с NSDateFormatter в быстром

extension String { 
var asStringDate: NSDate? { 
    get { 
     let dateFormatter = NSDateFormatter() 
     let offsetTime = NSTimeInterval(NSTimeZone.localTimeZone().secondsFromGMT) //support local timezone 
     dateFormatter.locale = NSLocale.currentLocale() 
     dateFormatter.dateFormat = "EEE, d MMM yyyy H:mm" 
     if let date = dateFormatter.dateFromString(self) { 
      let finalDate = date.dateByAddingTimeInterval(offsetTime) //support local timezone 
      //    if Constants.debug { println("\(self) -> \(finalDate)") } //For debugging purposes 
      return finalDate 
     } 
     println("Error while formating string:'\(self)' to date in String.asStringDate")  //For debugging purposes 
     return nil 
    } 
} 

по какой-то причине, на имитатор работает нормально, но во время работы с Xcode на моем iPhone я получаю ноль из

dateFormatter.dateFromString(self) 

примера строки я получаю: "Fri, 19 Jun 2015 15:52" любых идей, почему он терпит неудачу в iPhone?

ответ

0

я, наконец, получил его, проблема была в строке:

dateFormatter.locale = NSLocale.currentLocale() 

, в котором я установить currentLocale, в данный момент я прикрепленного к конкретной местности, а не по умолчанию (в iPhone и Mac-видимому, не то же самое, поэтому для каждого есть другое значение). изменив строку на:

dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") 

решить эту проблему, теперь расширение работает, как ожидалось.

0

Различные поведения при анализе объекта даты на сегодняшний день вызваны различной локалью на вашем устройстве и симуляторе. В зависимости от разных локалей вам необходимо соответствующим образом изменить формат даты.

Если строка даты, которую вы получаете, задана вашим серверным сервером, вы должны убедиться, что она установлена ​​в формате ISO 8601 (например, 2015-08-02T21: 50: 49Z), чтобы ее можно было легко разобрать и преобразовать в объект даты в любом языке.

+0

привет, у меня нет способа изменить формат на сервере, откуда я получаю данные, и ясно, что у меня проблема с языковой версией, поэтому я опубликовал код, ожидая, возможно, чтобы получить предложение об этом или о том, что я делаю неправильно, так как я думал, что обрабатываю код в коде. В любом случае, спасибо за помощь. – Gutty1

+0

Ну, в случае, если вы не можете изменить формат ответа сервера, вы также можете попытаться жестко закодировать локаль для форматирования даты, например: 'dateFormatter.locale = NSLocale (localeIdentifier:" en_US ")'. Это должно сработать. – utogaria

+0

это то, что я сделал, если вы видите, я вчера опубликовал ответ перед вашим сообщением, спасибо в любом случае – Gutty1