1

我正在尝试为单元测试设置特定日期:

NSCalendar *calendar = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setCalendar:calendar];
[components setYear:2011];
[components setMonth:5];
[components setDay:12];
[components setHour:1];
[components setMinute:0];
[components setSecond:0];

NSDate *date = [calendar dateFromComponents:components];
NSLog(@"Date I tried to set: %@", date);

但是,这会打印出“我尝试设置的日期:2011-05-11 17:00:00 +0000。” 日期似乎差了一天,我不知道为什么将时间打印为 17:00:00。为什么是这样?

4

2 回答 2

2

NSDate 没有任何与之关联的时区数据。实际上距离“格林威治标准时间 2001 年 1 月 1 日的第一时刻”只有几秒钟的时间。因此,日期组件和日历正在使用您当地的时区创建 NSDate。该 NSDate 是从 2001 年 1 月 1 日 00:00 GMT 开始的正确秒数,但是当您记录它时,它会向您显示 GMT 日期而不是本地时区。如果您将该记录时间调整为您的时区,它将是 2011-05-12 01:00:00。

于 2011-09-06T10:29:43.200 回答
0

尝试

NSCalendar *calendar = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setCalendar:calendar];
[components setYear:2011];
[components setMonth:5];
[components setDay:12];
[components setHour:1];
[components setMinute:0];
[components setSecond:0];
[components setTimeZone:[NSTimeZone defaultTimeZone]];
NSDate *date = [calendar dateFromComponents:components];

或者你可能想要

 [components setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
于 2016-10-03T22:01:16.437 回答