这段代码
NSCalendar *calendar =[NSCalendar currentCalendar];
[gregorian setTimeZone:tz];
NSLog(@"%@", [gregorian timeZone]);
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:[NSDate date]];
[comp setDay:info.day];
[comp setMonth:info.month];
[comp setYear:info.year];
[comp setHour:info.hour];
[comp setMinute:info.minute];
[comp setSecond:info.second];
[comp setTimeZone:tz];
NSLog(@"%@", [comp timeZone]);
NSLog(@"%@", [gregorian dateFromComponents:comp]);
在控制台中显示以下内容:
Europe/Moscow (MSKS) offset 14400 (Daylight)
Europe/Moscow (MSKS) offset 14400 (Daylight)
2011-08-31 20:00:00 +0000
因此,日历和组件的时区指定正确,但是[gregorian dateFromComponents:comp]
返回时区 (GMT) 错误的 NSDate 值。
我需要更正什么才能获得正确的时区?
您看到的输出是完全正常的。如果你 NSLog aNSDate
直接对象,你会得到任何description
方法返回,这是日期的 GMT 表示(但这不是一成不变的)。
NSDate
对象不受时区的限制。 ANSDate
代表一个absolute从参考日期开始计算的即时时间。例如,在撰写本文时,当前日期类似于337035053.199801
(自参考日期以来的秒数),可以表示为2011-09-06 20:50:53 GMT
or 2011-09-06 22:50:53 CEST
。两者都是人类可读的不同表示same date.
总之,您需要什么才能获得正确的时区?你需要使用NSDateFormatter
获取您的字符串表示形式NSDate
在您喜欢的任何时区。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)