NSDateFormatter liefert unterschiedliche Rückgabewerte auf zwei verschiedenen Geräten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSDateFormatter liefert unterschiedliche Rückgabewerte auf zwei verschiedenen Geräten

    Hallo zusammen,

    wie das Topic schon sagt, liefert dateFromString() beim iPad2 iOS 8.3 nil zurück und beim iPad4 iOS 8.3 klappt es.

    Dieser Code führt zu zwei unterschiedlichen Rückgabewerten.

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
    //dateFormatter.timeZone = NSTimeZone(name:"UTC") <--Sind Workarounds von Netz haben nicht funktioniert
    //dateFormatter.locale = NSLocale(localeIdentifier:"en_US_POSIX") <--Sind Workarounds von Netz haben nicht funktioniert
    let dateFromString : NSDate? = dateFormatter.dateFromString(self)

    Die Workarounds vom google haben bei mir nicht geklappt.
  • Ja, so ein Datum ist schon erschreckend kompliziert... ich würde erst mal gucken, welches locale in den beiden Geräten gesetzt wird, dann den Format-String kürzen, um den Fehler einzugrenzen.
    In der Doku steht "In iOS, the user can override the default AM/PM versus 24-hour time setting. This may cause NSDateFormatter to rewrite the format string you set."
    Wie dass läuft steht da nicht - theoretisch könnte also sogar die Abfolge der Konfiguration (erst locale, dann dateFormat) einen Unterschied machen.

    Quellcode

    1. + dateFormatFromTemplate:options:locale:

    könnte man auch mal probieren.
  • @gandhi Ja das ist eine Extension. Der String ist aber nicht nil und hat auch das gleiche Format.

    Beim ipad4 sieht das nach der Formatierung dann so aus:

    2012-06-28 10:00:00 UTC

    Vorher:
    2012-06-28 10:00:00

    @t-no
    Die locale sind gleich und die dataFromTemplate liefert mir eine falsche Formatierung. Auch das setzen vor dem DateFormat hat nichts gebracht.
  • Hi,

    ich hab den Fehler gefunden es lag an yyyy-MM-dd hh:mm:ss

    So hat es dann geklappt auch das die Zeit richtig übernommen wird:

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

    dateFormatter.timeZone = NSTimeZone(name: "UTC")

    Trotzdem ist mir nicht klar, wieso es bei einem Gerät geklappt hat und bei dem anderen nicht.
  • Der String war 2012-06-28 10:00:00. Ist also vor 13:00.. Ausserdem ist der ja auf dem einen Gerät gelaufen und auf dem anderen nicht. Es hätte also bei allen beiden Geräten nil zurückgeben müssen. Die Einstellung auf allen beiden Geräten war auf 24h gesetzt.
  • Es dürfte keinen direkten Zusammenhang mit deinem Problem geben, aber es gibt da eine grundlegende Änderung was kurze TZ-Kürzel und 24-h-Modus angeht.

    cocoabuilder.com/archive/cocoa…king-on-ios-5.html#311281

    Daher auch der Workaround mit en_US/en_GB.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?