2011-04-21 104 views
1

我有一個相當簡單的問題。我有一組UTC的日期。我想在正確的本地時間內向用戶表示這些時間(或者,如果DST當前沒有生效)用於DST。NSTimeZone在iPhone中自動調整爲DST

所以,如果我做了什麼,如下面,將時間戳正確設置在紐約當地時間考慮DST考慮有效

NSDate *date = initialise with a UTC time 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"]; 
    [formatter setTimeZone:timeZone]; 
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

NSString *timeStamp = [formatter stringFromDate:date]; 

或者所以我需要做別的事情的時候?我是否檢查NSTimeZone.isDaylightSavingTime/NSTimeZone.daylightSavingTimeOffset並相應地調整我的日期或類似的東西?

在此先感謝?

Twibbles。

回答

2

是的,如果您使用[NSTimeZone timeZoneWithName]創建時區,則NSDateFormatter將自動調整爲DST。 NSTimeZone知道每個時區的DST規則,並可以查看未來和過去,並將NSDate傳遞給stringForDate做正確的事情。但是,如果您使用[NSTimeZone timeZoneForSecondsFromGMT]創建NSTimeZone,則不會進行DST調整。還應該注意的是,DST規則可能會發生變化,這意味着NSTimeZone不保證始終爲所有時區做正確的事情。

您不需要使用NSTimeZone.isDaylightSavingTimeNSTimeZone.daylightSavingTimeOffsetNSDate格式化爲DST正確的本地時間。這兩種方法都在當前時間運行。如果您想知道NSDate是否屬於時區中的DST,則可以使用NSTimeZone.isDaylightSavingTimeForDate方法,如果您想知道NSDate的DST偏移量是多少,則可以使用NSTimeZone.daylightSavingTimeOffsetForDate方法。