我試圖使用「NSDate for first day of the month」中提供的解決方案來獲取每月的第一天。從日曆組件創建NSDate時出現1個錯誤
我的代碼是在NSDate的類別:
- (NSDate *)firstDayInMonthOfDate {
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:self];
comps.timeZone = calendar.timeZone;
NSDate *startDate;
[comps setDay:1];
startDate = [calendar dateFromComponents:comps];
return startDate;
}
這就產生了前一個月的最後一天....例如:
self = date: 2013-11-02 22:00:00
comps = <NSDateComponents: 0x749b4c0>
TimeZone: Europe/Bucharest (GMT+03:00) offset 10800 (Daylight)
Calendar Year: 2013
Month: 11
Leap month: no
Day: 1
startDate = 2013-10-31 22:00:00 +0000
因此,爲了得到正確的日期,我必須設置comps.day = 2。我只是不明白多餘的1來自哪裏。
[編輯]我想使用收集視圖單元格的日期,所以我想一個可靠的方式來獲取本月的第一個日期,例如。 2013-11-01
[編輯]使用NSDateFormatter打印日期給出了正確的結果(2013-10-31)。與PO和NSLog的問題是,他們沒有解釋時區正確右(2012-12-31 22:00 + 3H GMT = 2013-01-01上午12點!) 我建議的日期編程教程:http://rypress.com/tutorials/objective-c/data-types/dates.html
*** TIME ZONE *** - 這是(至少)與過去兩個小時,這個問題的第二次。而且很多次重複。 –
如果你只是複製和粘貼代碼,你不應該感到驚訝,如果你不明白。 – vikingosegundo
[從\ [NSDate date \]關閉幾個小時獲取日期](http://stackoverflow.com/questions/8466744/getting-date-from-nsdate-date-off-by-a-few小時) –