2012-11-28 74 views
4

我想獲得一個NSDate對象,其中21:00作爲當地時間 - 不關心哪一天。我抓我的頭在這個非常奇怪的結果:設置NSDateComponents結果不正確NSDate

NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [[NSDateComponents alloc] init]; 
[components setHour:21]; 
[components setMinute:0]; 
[components setSecond:0]; 

NSDate *date = [calendar dateFromComponents:components]; 
NSLog(@"%@", date); 

結果是0001-01-02 04:52:58 +0000

我不知道爲什麼。目前時間爲太平洋標準時間17:34,但結果不會隨着當地時間而改變。

如果我調整setMinute和setSecond線

[components setMinute:7]; 
[components setSecond:2]; 

我得到0001-01-02 05:00:00 +0000,這是正確的(21:00 PST)。

+1

如果您將年份設置爲2012年,您會得到什麼結果? – bneely

+0

不知何故,你的時區變得奇怪。否則NSDateFormatter正在試圖解釋2000年的閏秒。 –

+0

@bneely修復它!隨時回答,我會接受。 – apb

回答

9

問題是,鐵路時間直到1883年11月18日才實現。你忽略設置一年,所以你在這之前得到一個日期。在實施鐵路時間之前,美國時區與GMT的時差並不完全相同。我不確定蘋果會爲您選擇哪個時區,但是在1883年移至PST時似乎已經調整了7分鐘和2秒。

+0

他們可能選擇了舊金山的太陽時間或一些這樣的。 –

+0

經過快速瀏覽,可以提供日期和時間最近的城市。我購買了CA的Mac被設置爲庫比蒂諾,我不記得隨時可以自己設置它。所以我想他們要麼提名庫比蒂諾時間來代表鐵路前PST,要麼他們可能實際上會使用那個最接近的城市。 – Tommy

+0

+1 - 很好的解釋。我知道那年和時區確定了它,但不知道爲什麼。很高興知道。 – bryanmac