从NSDateComponents创建NSDate一天

时间:2011-09-06 10:13:26

标签: ios nsdate nsdatecomponents

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

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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

尝试

.bx-wrapper .bx-next {
  right: 10px;
  background: image-url('controls.png') no-repeat -43px -32px;
}

或者你想要

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