gpt4 book ai didi

ios - NSCalendar currentCalendar setTimeZone 未设置

转载 作者:可可西里 更新时间:2023-11-01 17:09:53 29 4
gpt4 key购买 nike

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

[[NSCalendar currentCalendar] setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [[NSCalendar currentCalendar] timeZone];
NSLog(@"%@", tz);

日志语句的结果是:

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

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

但是,在 NSCalendar 的类别中功能相似的代码可以正常工作:

[self setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [self timeZone];
NSLog(@"%@", tz);

和日志产量:

美国/纽约 (EDT) 偏移 -14400(夏令时)

设置 [NSCalendar currentCalendar] 的时区是怎么回事?这种行为是违反直觉的。

最佳答案

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

  • 它每次都返回一个新值。
  • 它返回一个缓存值,除非它检测到它应该返回一个新值。
  • 它返回一个缓存值,并在发现语言环境/日历更改时将其清除。

修改日历只有在第一种情况下才有意义。 (在第二种情况下,之前对 +currentCalendar 的调用将指向同一个实例。在第三种情况下,对 +currentCalendar 的所有调用将返回同一个实例,直到用户更改语言环境/时区。)

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

关于ios - NSCalendar currentCalendar setTimeZone 未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12791102/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com