【发布时间】:2011-05-06 16:38:13
【问题描述】:
我有一个包含开始日期和结束日期的类,通常初始化为每月的第一秒和最后一秒。
以下函数从 2010 年 11 月向前到 12 月并再次返回正常工作,但是从 11 月向后返回最终将 startDate 设置为
格林威治标准时间 2010-09-30 23:00:00
即。一个月零一个小时前。
奇怪的是 endDate 仍然正确设置为
2010-11-01 00:00:00 GMT
从这个不正确的日期往前一个月也会得到正确的时间和日期。
这是一个错误还是我在做我不应该做的事情?
-(void) moveMonth:(NSInteger)byAmount { // 正数或负数月数 NSCalendar *cal = [NSCalendar currentCalendar]; NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; //更新开始日期 [组件 setMonth:byAmount]; NSDate *newStartDate = [cal dateByAddingComponents:components toDate:[self startDate] options:0]; [自我设置开始日期:新开始日期]; // 和结束日期 [组件集月:1]; NSDate *newEndDate = [cal dateByAddingComponents:components toDate:[self startDate] options:0 ]; [自我设置结束日期:新结束日期]; }解决方案:正确回答指出这是 DST 问题
如果您想处理绝对时间和日期,则使用以下内容可避免涉及任何 DST。
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; NSTimeZone *zone = [NSTimeZone timeZoneWithName:@"GMT"]; [cal setTimeZone:zone];【问题讨论】:
标签: iphone objective-c ios