此代碼NSCalendar dateFromComponents:GMT時區,而不是systemTimeZone
NSCalendar *calendar =[NSCalendar currentCalendar];
[gregorian setTimeZone:tz];
NSLog(@"%@", [gregorian timeZone]);
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:[NSDate date]];
[comp setDay:info.day];
[comp setMonth:info.month];
[comp setYear:info.year];
[comp setHour:info.hour];
[comp setMinute:info.minute];
[comp setSecond:info.second];
[comp setTimeZone:tz];
NSLog(@"%@", [comp timeZone]);
NSLog(@"%@", [gregorian dateFromComponents:comp]);
顯示在控制檯中的以下內容:
Europe/Moscow (MSKS) offset 14400 (Daylight)
Europe/Moscow (MSKS) offset 14400 (Daylight)
2011-08-31 20:00:00 +0000
因此,日曆和組件的時區是正確指定,但[gregorian dateFromComponents:comp]
返回NSDate的價值錯誤的時區(GMT)。
我需要更正什麼才能獲得正確的時區?
如果您是直接的NSLog一個'NSDate'object,你總是會得到它的GMT表示。無論如何,'NSDate'對象沒有任何時區的概念。它們代表從參考日期開始測量的**絕對**時間。您可以使用'NSDateFormatter'爲不同的時區獲得日期不同的可讀*表示*,但它們是表示。 – albertamg
我認爲NSDate在時間戳的不重要的位隱藏了它的派生時區。但這只是用於[NSDate描述],並且最好是不可靠的。 –
是的,你說得對,夥計們。 謝謝,現在我明白了:) – Mitry