首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSCalendar currentCalendar setTimeZone not设置

NSCalendar currentCalendar setTimeZone not设置
EN

Stack Overflow用户
提问于 2012-10-09 00:00:47
回答 1查看 6.7K关注 0票数 3

如果我尝试从应用程序的任意位置任意设置时区,请使用以下方法:

代码语言:javascript
运行
复制
[[NSCalendar currentCalendar] setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [[NSCalendar currentCalendar] timeZone];
NSLog(@"%@", tz);

日志语句的结果是:

美国/洛杉矶偏移-25200 (日光)

(这是我的本地时区,即NSTimeZone systemTimeZone)

但是,在NSCalendar上的类别中,功能相似的代码工作得很好:

代码语言:javascript
运行
复制
[self setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [self timeZone];
NSLog(@"%@", tz);

而原木产量:

美国/纽约(美国东部时间)偏移-14400 (日光)

如何设置NSCalendar currentCalendar的时区?这种行为是违反直觉的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-09 02:13:01

简单的回答:+[NSCalendar currentCalendar]没有返回相同的实例。它应该返回一个实例,该实例在调用+currentCalendar时反映当前选定的区域设置和时区。有三种可能的合理行为:

  • 它每次都返回一个新值。
  • 它返回一个缓存的值,除非它检测到它应该返回一个新值。
  • 它返回一个缓存的值,当它注意到区域设置/日历更改时会清除它。

在第一种情况下,修改日历才是明智的。(在第二种情况下,以前对+currentCalendar的调用将指向同一个实例。在第三种情况下,所有对+currentCalendar的调用都将返回相同的实例,直到用户更改locale/时区为止。

设置应用程序时区的正确方法是+[NSTimeZone setDefaultTimeZone:]

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12791102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档