2010-09-07 3 views
15

Ich muss ein NSDate für ein bestimmtes Datum, eine bestimmte Zeit und eine bestimmte Zeitzone für eine iPhone App festlegen.Festlegen eines NSDate für ein bestimmtes Datum, eine bestimmte Zeit und eine bestimmte Zeitzone

Der folgende Beispielcode funktioniert gut auf iOS 4, da setTimeZone mit iOS 4 eingeführt wurde. Wie kann ich ein NSDate einfach ohne setTimeZone auf ein Datum, eine Uhrzeit und eine Zeitzone setzen, damit es auf iOS 3.0-Geräten verwendet werden kann?

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setYear:2010]; 
[comps setMonth:8]; 
[comps setDay:24]; 
[comps setHour:17]; 
[comps setMinute:5]; 
[comps setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"] ]; 

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *referenceTime = [cal dateFromComponents:comps]; 

denke, das sollte einfach sein, aber irgendwie NSDate, Komponenten und Kalender und ich sind nicht gute Freunde ...

Antwort

3

Ich frage mich, ob Sie die Zeitzone auf dem NSCalendar Objekt, das Sie verwenden, um die NSDate aus der NSDateComponents erstellen können. Ich habe das nicht versucht und weiß nicht, ob es funktioniert, aber es ist wahrscheinlich einen Versuch wert.

+0

Danke! Ich habe gerade die setTimeZone für die Comps entfernt und eine für den cal hinzugefügt, [cal setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @ "UTC"]]; und es funktioniert gut und gibt mir das gleiche Ergebnis. Groß! – Structurer

3

NDates haben kein Konzept der Zeitzonen in und von sich selbst. Sie sind im Grunde Sekunden seit einem bestimmten willkürlichen Datum bei GMT. Daher können Sie ihnen keine Zeitzone geben. Wenn die Zeitzone wichtig ist, müssen Sie sowohl die Uhrzeit als auch die Zeitzone verfolgen.

+0

Danke Ben für Ihre Antwort. Was ich getan habe, um Ihre Hypothese zu testen, ist die Zeile mit der setTimeZone zu entfernen. Wenn ich das tue, erhalte ich ein anderes Ergebnis, wenn NSDate timeIntervalSinceDate für die aktuelle Zeit verwendet. Vielleicht hast du Recht, dass NSDate selbst die Zeitzone nicht interessiert, aber wenn du es mit NSDateComponents eingibst, ergeben sich unterschiedliche Ergebnisse basierend darauf, ob ich die setTimeZone dort habe oder nicht. Hoffe das macht Sinn? – Structurer

+0

NSDateComponents verfolgt die Zeitzone ... es ist eine viel schwerere Klasse als NSDate. –