2016-03-31 3 views
1

Wenn ich April from 04 (MM)-Apr (MMM) zu konvertieren versuche es wieder in nil gedreht, dann ist dies ein bekanntes Problem in iOS oder mache ich etwas falsch?Bug, wenn Datum in Objective-C zu analysieren versucht

Hier ist mein Code für die Inspektion:

NSString *[email protected]"2016-04-01"; 
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSDate* myDate = [dateFormatter dateFromString:dateString]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MMM"]; 
NSString *stringFromDate = [formatter stringFromDate:myDate]; 
NSLog(@"%@ == %@",dateString,stringFromDate); 

wenn Änderung [email protected]"2015-04-01" die stringFromDate kehrt Apr

Das ist mein Ausgang:

this is the log image

2016-04-01 12 : 17: 45.708 [32172: 2389414] 2016- 04-01 == (null)

2016-04-01 12: 17: 47,446 [32172: 2389414] 2015.04.01 == April

+0

Warum bist du nicht myDate protokollieren? dateFromString ist viel wählerischer als stringFromDate, daher ist myDate eher das Problem. – gnasher729

+0

Ich würde nach unsichtbaren Zeichen in Ihrer Zeichenfolge suchen. – Eiko

+0

In welchem ​​Land sind Sie? Das würde uns helfen, die spezifische Zeitzone zu finden, die Sie verwenden. – Sulthan

Antwort

1

ich Ihren Code versucht, und es gibt mir null für Jahr 2022, aber Jahre 2018,2020 gibt es Apr ... komisch!

NSString *[email protected]"2022-04-01"; 
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSDate* myDate = [dateFormatter dateFromString:dateString]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"+5:30"]]; 
[dateFormatter setDateFormat:@"MMM"]; 
NSString *stringFromDate = [dateFormatter stringFromDate:myDate]; 
NSLog(@"%@ == %@",dateString,stringFromDate); 

enter image description here

UPDATE:

analysieren Bitte geben Sie die Zeichenfolge wie folgt aus: 2016-04-01 01:00

Wegen Tageslicht in Jordanien Speichern der Uhr wird + verschoben 1 Stunde also gibt es keine Zeit im Universum so: 2016-04-01 00:00

Dieser sh könnte Probleme mit dem Nil-Objekt lösen.

+0

kannst du deinen urcode zeigen –

+0

myDate objekt ist nil guys .. warum ist es nil ?! –

+0

fügen Sie diese Zeitzone '[NSTimeZone timeZoneForSecondsFromGMT: 0];' nach Antwort, versuchen Sie es einmal –

2

Dies ist wahrscheinlich ein Problem in Ihrer Zeitzone. Beachten Sie, dass beim Analysieren eines Datums ohne Zeit die Zeit als Null angenommen wird. Es gibt jedoch einige bestimmte Zeiten nicht, normalerweise aufgrund von Änderungen der Sommerzeit (die im März auf der ganzen Welt auftreten) oder aufgrund bestimmter lokaler Zeitänderungen.

Zum Beispiel ist in Jordanien die DST-Änderung . Das bedeutet, dass die Zeit Apr 1 2016, 00:00 nicht existiert, weil March 31 2016, 23:59 sofort Apr 1 2016, 01:00 wird. Wenn das Datum nicht vorhanden ist, muss das Datumsformatierungsprogramm nil zurückgeben.

Sie in der Regel das Problem durch die Verwendung einer voreingestellten GMT Zeitzone beheben, die dieses Problem nicht haben, z

dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

Beachten Sie, dass da Sie keine Zeit Parsen sind, Unterschiede Zeitzone nicht Sie beeinflussen sollte.

Schritte zum Reproduzieren

die Zeitzone auf Ihrem Rechner Jordan Zeitzone ein: enter image description here

NSString *dateString = @"2016-04-01"; 
NSDateFormatter* parsingFormatter = [[NSDateFormatter alloc] init]; 
parsingFormatter.dateFormat = @"yyyy-MM-dd"; 

NSLog(@"Parsed: %@", [parsingFormatter dateFromString:dateString]); // "(null)" 
mit Zeitzone fix

:

NSString *dateString = @"2016-04-01"; 
NSDateFormatter* parsingFormatter = [[NSDateFormatter alloc] init]; 
parsingFormatter.dateFormat = @"yyyy-MM-dd"; 
parsingFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

NSLog(@"Parsed: %@", [parsingFormatter dateFromString:dateString]); // "2016-04-01 00:00:00 +0000" 
+0

Mann, etwas falsch mit dem Parsen, es gibt das myDate-Objekt als null! –

+0

@AhmedAwad und haben Sie meinen Code versucht? Beachten Sie, dass Sie * vor dem Analysieren * hinzufügen müssen. – Sulthan

+0

Beachten Sie, dass dies nicht immer das erwartete Ergebnis ergibt, wenn beide Datumsformatierer unterschiedliche Zeit haben Dies ist wirklich kein Fall für NSDate, es ist für Datumskomponenten. :) – Eiko

Verwandte Themen