我正在尝试使用“每月第一天的 NSDate ”中提供的解决方案来获取每月的第一天。
我的代码属于 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 10pm + 3h GMT!= 2013-01-01 12am)我推荐一个日期编程教程:http ://rypress.com /tutorials/objective-c/data-types/dates.html