正从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);
答
我已经想通了。
它显示什么是正确的,因为NSDate的节省的绝对时间,这样的时间段总是+0000,
而且最好是通过这种方式保持它,因为我需要比较:方法的NSDate等
唯一的区别是,当你要将绝对日期翻译为本地日期可读的字符串的用户,只是照顾它。
谢谢!所以问题仍然是关于时区?有没有什么方法可以直接获取用户当前的时区?就像[NSCalendar currentCalendar]? – 2012-02-01 05:28:49
我检查了默认的timeZone,它是默认的Asia/Hebin,所以...我能做些什么? – 2012-02-01 06:18:17