我想找出一個口的第一個星期的一年的日期將返回錯誤的日期NSCalendar dateFromComponents 2
2012-12-29 23:00:00 +0000
當我與我的Mac日曆相比,我需要得到的是:
2012-12-31 23:00:00 +0000
有什麼建議嗎?
我想找出一個口的第一個星期的一年的日期將返回錯誤的日期NSCalendar dateFromComponents 2
2012-12-29 23:00:00 +0000
當我與我的Mac日曆相比,我需要得到的是:
2012-12-31 23:00:00 +0000
有什麼建議嗎?
問題可能是設置weekDay
這裏是工作的代碼
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:2013];
[components setMonth:1];
[components setDay:1];
NSDate *newDate = [calendar dateFromComponents:components];
NSLog(@"%@",newDate); //2012-12-31 23:00:00 +0000
其他替代你可以使用NSGregorianCalendar
,而不是currentCalender
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]];
[comp setYear:2013];
[comp setMonth:1];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];
NSLog(@"%@",firstDayOfMonthDate); // 2012-12-31 23:00:00 +0000
(我知道現在你已經制定了什麼正在進行,但爲了未來的讀者...)
看看你在做什麼摹這裏:
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:2013];
[components setMonth:1];
[components setWeekOfMonth:1];
[components setWeekday:1];
讓我們今天(2013年2月28日)爲例,看看我們每一步驟(假設後獲得;我不能檢查):
setYear:2013
- 沒有變化,因爲今年已經2013setMonth:1
- 更改爲1月:2013年1月28日setWeekOfMonth:1
- 改變當天2013年1月的第一個星期-of周(星期四):2013年1月3日setWeekday:1
- 換到週日在同一個星期:2012-12-30現在,當你打印出來l 2012年12月30日的ocal午夜,但在UTC,你會得到「2012-12-29 23:00:00 +0000」,因爲你的本地時區可能比UTC早1小時。
所以,當你已經建立了,你想setDay
代替setWeekOfMonth
/setWeekday
,假設你真的想「1月1日」而不是「1週週日一月」。
好,你可以接受的答案,如果它可以幫助你,其次我已編輯輸出的答案 – nsgulliver 2013-02-28 13:48:55
問題是沒有使用NSGregorianCalendar而不是currentCalendar - 特別是setDay vs setWeekday;你的代碼*在這方面被改變了,但你在文中沒有提到。我建議你編輯以解釋之前發生的事情。 – 2013-02-28 13:53:31
@JonSkeet在回答編輯 – nsgulliver 2013-02-28 14:00:58