2015-09-30 37 views
0

我對這兩個NSDate對象如何知道它們在哪個時區有些困惑。我的印象是NSDate對象只存儲一個時間點並且沒有關於時區的信息。NSDate如何知道它是TimeZone?

我創建和記錄兩個日期是這樣的:

NSString* timeString = @"6:04 PM"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 
[dateFormatter setDateFormat:@"h:mm a"]; 
NSDate *time = [dateFormatter dateFromString:timeString]; 

NSDateFormatter *currentFormatter = [[NSDateFormatter alloc] init]; 
[currentFormatter setTimeStyle:NSDateFormatterLongStyle]; 
NSLog(@"%@", [currentFormatter stringFromDate:time]); 
NSLog(@"%@", [currentFormatter stringFromDate:[NSDate date]]); 

這將產生輸出:

18:04:00 GMT 
11:12:36 BST 

它是如何知道的第一次約會是GMT,第二個是BST?

(這是英國夏令時間在這裏。你的情況可能在這方面會發生變化)

+0

你確定這是給我們這個輸出的代碼嗎?我用你的代碼獲得了與時區相同的輸出。 –

+0

是的,iOS 6在iPhone 6s上運行,我的區域設置在英國,時區設置爲倫敦和24小時時間。 Xcode 7.0.1。 –

+0

爲了澄清,我使用的是iOS 9.0.1。 –

回答

2

你說得對,NSDate沒有一個時區。您的結果與此並不矛盾,因爲您不打印日期 - 您正在打印通過日期格式化程序傳遞日期信息的子集。您的currentFormatter只返回時間信息,而不是日期信息。如果添加此行:

[currentFormatter setDateStyle:NSDateFormatterLongStyle]; 

那麼結果會是這個樣子:

January 1, 2000 at 6:04:00 PM MST 
September 30, 2015 at 11:14:39 AM MDT 

換句話說,他們表現出了不同的時區,因爲它們是在不同的日期和時間區域反映了該日期的實際情況。在我的情況下,它目前是MDT,但在2000年1月1日它會是MST