NSDateFormatter überschreibt Format

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

  • NSDateFormatter überschreibt Format

    Hi zusammen!

    Ich habe gerade einen Fehler in 12 Jahre altem Code gefunden, der mich wundern ließ - vielleicht für Euch ein alter Hut:

    Ich schreibe einen Timestamp ("yyyyMMddHHmmss") in eine Datei und nutze dafür einen NSDateFormatter. Nun trat bei einem Benutzer der Effekt auf, dass der entsprechende String zu lang wurde und nicht das erwartete Format hatte und führende Nullen bei den Minuten entfielen. Als Konsequenz hatte die Ergebnisdatei ein ungültiges Format.

    Etwas Googlen brachte die Lösung: Ohne explizite Locale gibt es Fälle, in denen NSDateFormatter den angegebenen Format-String einfach überschreibt. Konkret reproduzierbar, wenn ein Benutzer in den System-Einstellungen eine Region mit 24h Uhrzeit ausgewählt hat, bei den Uhrzeiteinstellungen aber 12h aktiviert. Erstaunlich, dass es dazu Jahre brauchte ... Und ja, es gibt eine Technical FAQ von Apple dazu.

    Falls Ihr also auf ein festes Datumsformat angewiesen seid, unbedingt die Locale setzen, sonst kann es unangenehme Überraschungen geben - aber bestimmt wusstet Ihr das alle und ich bin der Trottel ;)

    Quellcode

    1. NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    2. [dateFormat setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];
    3. [dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    4. [dateFormat setDateFormat:@"yyyyMMddHHmmss"];
    Mattes

    P.S.: Ob der entsprechende Hinweis auch vor 12 Jahren schon in der Klassen-Doku stand? Dann Asche über mein Haupt...
    Diese Seite bleibt aus technischen Gründen unbedruckt.