0

我的代码如下

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

“现在”的日期应该是 2012-02-01 00:00:00

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

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

非常感谢!

4

2 回答 2

1

好吧,您为什么不尝试将时区设置为您喜欢的时区之一:

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

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

NSArray *timezones = [NSTimeZone knownTimeZoneNames];
NSLog(@"%@", timezones);
于 2012-02-01T05:02:19.303 回答
0

我已经想通了。

它显示的内容是正确的,因为 NSDate 保存绝对时间,因此时区始终为 +0000,

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

唯一的区别是当您要将绝对日期转换为用户的本地日期可读字符串时,请注意它。

于 2012-02-03T05:41:14.107 回答