2016-07-18 13 views
0

Ich habe eine wöchentliche Ansicht erstellt (ähnlich Kalender) mit Header Wochentag. Ich schaff' die aktuelle Zeit unter Code verwendet:Sommerzeit mit NSTimeZone Best Practice

+(NSDate *) getCurrentDate { 

    NSDate* datetime = [NSDate date]; 
    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/Juneau"];// this is dynamic and coming from server. 
    [dateFormatter setTimeZone:timeZone]; // Prevent adjustment to user's local time zone. 
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
    NSString* dateTimeInIsoFormatForUserTimeZone = [dateFormatter stringFromDate:datetime]; 
    return [dateFormatter dateFromString:dateTimeInIsoFormatForUserTimeZone]; 

} 

ich dieses Datum als Referenz benutzen Woche Datum erstellen (von Montag bis Sonntag). Mein Code funktioniert für alle Fälle, aber ich scheiterte in der Zeitzone.

Ich habe ähnliche Frage auf Stack-Überlauf gesehen, aber sie sind subjektiver und nicht in der Lage, mein Problem zu lösen. Antwort mit Code und Best Practice wird sehr geschätzt. Danke im Voraus!.

+1

Warum sollten Sie date> string> date machen? – Droppy

+0

Ich möchte das aktuelle Datum in der Zeitzone "Amerika/Juneau" erstellen. Zuerst erstelle ich das Datum mit der Systemzeitzone und wandle es in die Zeitzone "Amerika/Juneau" um. Bitte lassen Sie es mich wissen, wenn Sie einen besseren Weg dazu haben. – kaushal

+3

"NSDate" hat jedoch keine Zeitzone, daher gehen Zeitzoneninformationen verloren, wenn Sie das Datum zurückgeben. Mit dem gleichen Datum Formatierer zu tun, Datum> String> Datum erreicht nichts, sicher? – Droppy

Antwort

1
[[NSTimeZone *yourTimeZone*] secondsFromGMTForDate:*yourDate*] 

Mit dieser Methode können Sie secondsFromGMTForDate für ein bestimmtes timezone bekommen, die auch mit Sommer eingestellt wird.

Sie können diesen Offset verwenden, um ein Datumsobjekt in Ihrer Zeitzone zu erstellen und die Wochenansicht entsprechend anzuzeigen.

+0

Ich hatte den Datumsformatierer entfernt und Zeitzonenversatz angewendet, es funktioniert für mich. Bitte verbessern Sie Ihre Antwort mit UTC zur Berechnung der Zeitzone des Benutzers mit dem aktuellen Datum, um es zu beantworten :) – kaushal