Mic*_*ael 3 nstimezone nscalendar ios
如果我尝试使用以下内容从应用程序内的任何位置任意设置时区:
[[NSCalendar currentCalendar] setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [[NSCalendar currentCalendar] timeZone];
NSLog(@"%@", tz);
Run Code Online (Sandbox Code Playgroud)
日志语句的结果是:
America/Los_Angeles(PDT)偏移-25200(日光)
(这是我当地的时区,即[NSTimeZone systemTimeZone])
但是,NSCalendar上类别中功能相似的代码可以正常工作:
[self setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"EST"]];
NSTimeZone *tz = [self timeZone];
NSLog(@"%@", tz);
Run Code Online (Sandbox Code Playgroud)
和日志产量:
America/New_York(EDT)抵消-14400(日光)
如何为[NSCalendar currentCalendar]设置时区?这种行为违反直觉.
简单回答:+[NSCalendar currentCalendar]没有返回相同的实例.它应该返回您反映当前选择的地区和时区的实例在那个时候+currentCalendar被调用.有三种可能的合理行为:
修改日历只在第一种情况下才有意义.(在第二种情况下,先前的调用+currentCalendar将指向同一实例.在第三种情况下,所有调用+currentCalendar将返回相同的实例,直到用户更改区域设置/时区.)
设置应用时区的正确方法是+[NSTimeZone setDefaultTimeZone:].
| 归档时间: |
|
| 查看次数: |
6168 次 |
| 最近记录: |