正从NSCalendar一个的NSDate和NSDateComponents

问题描述:

我的代码是像下面正从NSCalendar一个的NSDate和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,我尝试了2种方法都:

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小时的差异,我现在在中国,所以我在+800时区我猜?

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

非常感谢!

好了,你为什么不尝试的时区设置,以自己的喜好之一:

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

你可以看到著名的时区的列表,包括:

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

谢谢!所以问题仍然是关于时区?有没有什么方法可以直接获取用户当前的时区?就像[NSCalendar currentCalendar]? – 2012-02-01 05:28:49

+0

我检查了默认的timeZone,它是默认的Asia/Hebin,所以...我能做些什么? – 2012-02-01 06:18:17

我已经想通了。

它显示什么是正确的,因为NSDate的节省的绝对时间,这样的时间段总是+0000,

而且最好是通过这种方式保持它,因为我需要比较:方法的NSDate等

唯一的区别是,当你要将绝对日期翻译为本地日期可读的字符串的用户,只是照顾它。