2010-11-15 36 views
0

我一直在試圖環繞NSDateNSCalendarNSDateComponentsNSTimeZone,並且NSDateFormatter我的頭計算。如何從一個特定的時間段獲得一個NSDate並執行基於該日期

NSDate,NSTimeZoneNSDateFormatter是非常簡單的。其他班不是。

我想獲得當前的東部時間(實際日期/時間是在代碼運行時的EST)。

然後,我想將該日期推遲一個月,同時考慮可能(或不可能)生效的夏令時。

從我所瞭解的情況來看,添加84600是不正確的方法,但我可能是錯的。

有人可以發表一個如何做到這一點的例子嗎?

回答

2

這其實很簡單:

NSDate *now = [NSDate date]; 

NSDateComponents *oneMonth = [[[NSDateComponents alloc] init] autorelease]; 
[oneMonth setMonth:1]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDate *oneMonthFromNow = [calendar dateByAddingComponents:oneMonth toDate:now options:0]; 

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 
[df setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]]; 
[df setDateStyle:NSDateFormatterMediumStyle]; 
[df setTimeStyle:NSDateFormatterMediumStyle]; 

NSLog(@"Now in New York: %@", [df stringFromDate:now]); 
NSLog(@"One month from now in New York: %@", [df stringFromDate:oneMonthFromNow]); 

編輯:那就是說,你的問題是容易混淆的措辭一點。使用NSDate,您不需要在特定時區進行計算。你也不會得到「當前的東部時間」。您只需獲得當前時間點(不考慮時區)並對其進行計算。實際轉換到特定時區僅在輸出時發生(當您向用戶顯示時間時,通常在他們的時區)。

+0

讓我試試看,我會回到這裏。 – 2010-11-15 15:47:42

相關問題