Eine spezifische Datums- und Gebietskonfiguration von iOS macht NSDateFormatter
, um ein wirklich merkwürdiges Verhalten zu haben. Es ignoriert meine Formatzeichenfolgen und formatiert Stunden mit einem Wert außerhalb des Bereichs von 0-24.NSDateFormatter formatiert Stunden im Bereich von 0-24 mit einigen internationalen Einstellungen
#define DATE_FORMAT "yyyy-MM-dd HH:mm:ssZ"
formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @DATE_FORMAT;
return [formatter stringFromDate:value];
Mit benutzerdefinierten Format: "yyyy-MM-dd'T'HH:mm:ssZ"
es gibt Tage, wie diese "2016.05.26 : 33: 17 PM +0000"
Es gibt keine 'T'
Charakter zwischen Datum und Uhrzeit Teile und 197 Stunden
NSDateFormatter
mit benutzerdefiniertem Format "yyyy-MM-dd'T'HH:mm:ss"
kann String "2016-05-26T07: 32: 57" nicht analysieren und gibt nil
zurück.
Dies geschieht nicht nur mit meinen benutzerdefinierten Formatierer. Interne Stiftung Formatierer für description
leiden unter diesem Problem:
(lldb) po value.description
2016-05-27 44:20:27 AM +0000
ich reproduzieren dieses Verhalten mit spezifischen System regionalen Einstellungen auf iOS 9.3.2:
"General">"Date & Time">"24-Hour Time" OFF
"General">"Date & Time">"Set Automatically" OFF
"General">"Date & Time">"Time Zone" Moscow
"General">"International">"Language" Русский (Russian)
"General">"International">"Prefferred language order" Русский (Russian), English (U.S.)
"General">"International">"Regional Format" Russia
"General">"International">"Calendar" Gregorian
Dies ist die einzige Konfiguration, die ich bisher kenne und die Formatierer auf diese Weise arbeiten lässt.
Weiß jemand, wie man das repariert? Ich werde jede Idee schätzen, wie ich das analysieren kann, weil ich keine eigene habe.
Was passiert, wenn Sie das Gebietsschema des Formatierers auf das spezielle Gebietsschema von 'en_US_POSIX' setzen? – rmaddy
Wie rmaddy empfiehlt, verwenden Sie immer das Gebietsschema 'en_US_POSIX', wenn Sie das ISO 8601/RFC 3339-Datum einstellen. Siehe [Technische Fragen und Antworten 1480] (https://developer.apple.com/library/ios/qa/qa1480/_index.html). – Rob
Danke! Nächste Zeile alles behoben: formatter.locale = [NSLocale localeWithLocaleIdentifier: @ "en_US_POSIX"]; – lazarev