我正在使用这种方法将月份和年份转换为等于给定年份月份的最后一天的日期。
+ (NSDate*)endOfMonthDateForMonth:(int)month year:(int)year
{
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [[NSDateComponents alloc] init];
comps.year = year;
comps.month = month;
NSDate *monthYearDate = [calendar dateFromComponents:comps];
// daysRange.length will contain the number of the last day of the endMonth:
NSRange daysRange = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:monthYearDate];
comps.day = daysRange.length;
comps.hour = 0;
comps.minute = 0;
comps.second = 0;
[comps setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
NSDate *endDate = [calendar dateFromComponents:comps];
return endDate;
}
我希望日期的时间分量为 00:00:00,这就是为什么我将时区设置为 GMT 0 并将分钟、小时和秒的日期分量设置为 0。从该方法返回的日期是正确的并且具有从 00:00:00 开始的时间分量。
这就是我将日期保存到 Core Data 的方式:
NSDate *endDate = [IBEstPeriod endOfMonthDateForMonth:endMonth year:endCalYear];
[annualPeriod setEndDate:endDate];
在检索数据并将其 NSLogging 到调试器控制台后,我得到的日期类似于2008-12-30 23:00:00 +0000
时间组件!= 0。
为什么现在组件发生了变化?它不应该停留在 00:00:00 吗?
我在这里写错了什么?
谢谢!!