2011-09-06 63 views
1
1天

我想设置一个单元测试在特定日期:从NSDateComponents创建的NSDate关闭的

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。 这是为什么?

回答

2

NSDate没有任何与其关联的时区数据。这实际上只是“从2001年1月1日格林威治标准时间第一时刻开始的几秒钟。”所以日期组件和日历正在使用当地时区创建一个NSDate。 NSDate是从格林威治标准时间1/1/2001 00:00开始的正确秒数,但是当您登录它时,它将以GMT格式显示日期而不是当地时区。如果您将记录的时间调整到您的时区,那将是2011-05-12 01:00:00。

+0

你如何调整记录时间时区?我试过[组件setTimeZone:[NSTimeZone systemTimeZone]]; – Huey

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"]];