从NSCalendar和NSDateComponents获取NSDate

时间:2012-02-01 04:36:54

标签: timezone nsdate nscalendar nsdatecomponents

我的代码如下所示

NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = [aDay.year intValue];   // 2012
components.month = [aDay.month intValue]; // 2
components.day = [aDay.day intValue];  // 1
components.hour = components.minute = components.second = 0;
NSDate *now = [self.calender dateFromComponents:components];

关于self.calendar,我尝试了两种方法:

self.calendar = [NSCalendar currentCalendar];
self.calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

但在此之后,当我打印日期“现在”时,它总是这样:

(gdb) po now
2012-01-31 16:00:00 +0000

日期“now”应该是2012-02-01 00:00:00

显然有8个小时的差异,我现在在中国,所以我想在+0800的时区吗?

我该如何解决这个问题?我是否必须处理时区?

非常感谢!

2 个答案:

答案 0 :(得分:1)

那么,为什么不尝试将时区设置为您喜欢的时区:

NSTimeZone *zone = [NSTimeZone timeZoneWithName:@"PST"];
[calendar setTimeZone:zone];

您可以通过以下方式查看已知时区的列表:

NSArray *timezones = [NSTimeZone knownTimeZoneNames];
NSLog(@"%@", timezones);

答案 1 :(得分:0)

我已经弄明白了。

它显示的内容是正确的,因为NSDate保留了绝对时间,所以时区总是+0000,

最好保持这种方式,因为我需要比较:NSDate中的方法等等

唯一的区别是当你打算将绝对日期翻译成用户的本地日期可读字符串时,只需要处理它。