2010-09-07 123 views
15

我需要將NSDate設置爲iPhone應用程序的特定日期,時間和時區。將NSDate設置爲特定的日期,時間和時區

下面的示例代碼適用於iOS 4,因爲setTimeZone是在iOS 4中引入的。我怎樣才能輕鬆地將NSDate設置爲日期,時間和時區而不使用setTimeZone,因此可以在iOS 3.0設備上使用它?

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]; 

猜測這應該是簡單的,但不知何故NSDate的,組件和日曆,我都沒有要好的朋友......

回答

3

不知您是否可以在NSCalendar對象上設置時區,用於創建NSDateComponents中的NSDate。我沒有試過這個,也不知道它是否會起作用,但它可能值得一試。

+0

謝謝!我剛剛刪除了comps的setTimeZone併爲cal添加了一個,[cal setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@「UTC」]];它工作得很好,給了我相同的結果。大! – Structurer 2010-09-08 08:51:51

3

NDates沒有在自己和時區的概念。自格林威治標準時間後的某個任意日期起,它們基本上是秒。因此,你不能給他們一個時區。如果時區很重要,則需要跟蹤時間和時區。

+0

感謝Ben的回答。我所做的測試你的假設是用setTimeZone刪除這一行。當我這樣做時,在當前時間使用NSDate timeIntervalSinceDate時會得到不同的結果。也許你是對的,NSDate本身並不關心時區,但使用NSDateComponents設置它會根據我是否有setTimeZone給出不同的結果。希望這是有道理的? – Structurer 2010-09-08 08:47:27

+0

NSDateComponents確實跟蹤時區...這是一個比NSDate重得多的類。 – 2010-09-08 13:17:35

相關問題