2012-04-23 15 views
10

wenn ich versuche:Warum hat NSDate von String einen Tag weniger?

NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyyMMdd"]; 

und

[formatter dateFromString:@"20120423"]; 

Mein neues NSDate Objekt sein wird: 2012 04 22 . Warum einen Tag weniger?

Thank

+2

Welche Zone ist in Ihrem Simulator oder Gerät festgelegt? Es wird standardmäßig auf diese Zone eingestellt. – rishi

+0

es geht um die Zeitzone ... der Unterschied kann nur ein paar Stunden dauern() oder auch nur eine, wie '2017-06-02 00:00:00 GMT + 1' ist gleich zu 2017-06-01 23:00:00 GMT + 0', das scheint, als wäre es ein Tag kurz, wenn Sie sich um die Werte der Jahre-Monate-Tage kümmern. – holex

Antwort

19

Sie haben Probleme mit Zeitzone, und es kann durch das Hinzufügen dieser Zeile Code gelöst werden:

formatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; 
+1

Wirklich hilfreich Kumpel !!! Ich habe das Problem vom letzten Tag gelöst und dieser einfache Liner hat funktioniert :) – Pushkraj

2

Für diejenigen, die für swift 3 Version

let formatter  = DateFormatter() 
formatter.timezone = TimeZone(abbreviation: "GMT") 
formatter.dateFormat = "yyyyMMdd" 
formatter.date(from: "20120423") 
0
sieht

Für einen Liner mit Swift 3

Date.init(dateString: "2014-07-31", format: "yyyy-MM-dd", timeZone: TimeZone.init(abbreviation: "GMT")!)