如果我尝试从应用程序的任意位置任意设置时区,请使用以下方法:
[[NSCalendar currentCalendar] setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [[NSCalendar currentCalendar] timeZone];
NSLog(@"%@", tz);日志语句的结果是:
美国/洛杉矶偏移-25200 (日光)
(这是我的本地时区,即NSTimeZone systemTimeZone)
但是,在NSCalendar上的类别中,功能相似的代码工作得很好:
[self setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [self timeZone];
NSLog(@"%@", tz);而原木产量:
美国/纽约(美国东部时间)偏移-14400 (日光)
如何设置NSCalendar currentCalendar的时区?这种行为是违反直觉的。
发布于 2012-10-09 02:13:01
简单的回答:+[NSCalendar currentCalendar]没有返回相同的实例。它应该返回一个实例,该实例在调用+currentCalendar时反映当前选定的区域设置和时区。有三种可能的合理行为:
在第一种情况下,修改日历才是明智的。(在第二种情况下,以前对+currentCalendar的调用将指向同一个实例。在第三种情况下,所有对+currentCalendar的调用都将返回相同的实例,直到用户更改locale/时区为止。
设置应用程序时区的正确方法是+[NSTimeZone setDefaultTimeZone:]。
https://stackoverflow.com/questions/12791102
复制相似问题