我有一段過去確實有用的代碼(至少我認爲它的確如此,否則問題早已被認出)。自從幾個星期以來,可能是自DST以來,它開始產生不正確的結果。DST(神祕失蹤的兩小時)的時區問題
這段代碼應該生成一個NSDate對象,指向給定日期周的第一天00:00h。
NSCalendar *gregorianCalender = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDayDate;
unsigned yearAndWeek = NSTimeZoneCalendarUnit | NSYearCalendarUnit | NSWeekCalendarUnit;
// retrieve the components from the current date
NSDateComponents *compsCurrentDate = [gregorianCalender components:yearAndWeek fromDate:date];
[compsCurrentDate setWeekday:2]; // Monday
[compsCurrentDate setHour:0];
[compsCurrentDate setMinute:0];
[compsCurrentDate setSecond:0];
// make a date from the modfied components
firstDayDate = [gregorianCalender dateFromComponents:compsCurrentDate];
NSLog(@"MONDAY: %@", firstDayDate);
今天是五月的第24屆所以最後一行應打印像
MONDAY: 2011-05-23 00:00:00 +0000
但它確實打印以下
MONDAY: 2011-05-22 22:00:00 +0000
這顯然是錯誤的。五月二十二日是星期天。現在,爲了讓事情奇怪,當我再次改變setHour:0
到
[compsCurrentDate setHour:2];
我的猜測是,有什麼東西錯了時區的結果是正確的。但花了半天的時間在Apple文檔上,谷歌和stackoverflow我無法弄清楚問題是什麼。也許我使用了錯誤的關鍵字,或者我是唯一一個遇到這個問題的人。
每一條信息都非常感謝!請讓我知道你在想什麼!謝謝!