[NSDate date]是否返回本地日期和时间?

use*_*859 6 iphone cocoa-touch nsdate

我傻了吗?一直以来我都认为[NSDate date]返回了当地的日期和时间.今天在NSStringformatter/stringFromdate/dateFromString遇到麻烦后,我发现我的[NSDate日期]正在返回2011-03-06 11:00:00 +0000.在研究完之后,我看到[NSDate date]返回一个始终为GMT的原始日期.

如果gmt偏移部分总是显示+0000,那么它的用途是什么?另外我不明白[myDate说明].文档说它应该显示gmt偏移量和dst信息.我得到与[NSDate日期]相同的东西.

最重要的是,如果我使用[NSDate日期]来获取当前日期,那么它是在下午2点之后我得到明天的日期,因为我在-10时区.更不用说我今天遇到的NSDateformatter问题.

我看到了吗?有趣的是我似乎记得看到[NSDate日期]返回2011-03-06 11:00:00 -36000,或者我认为我看到2011-03-06 11:00:00 -10000.

我可以使用它,但也许有人可以解释这一点,以帮助我更好地理解NSDate.

Tom*_*mmy 20

NSDate返回当前日期.虽然它可以在不同的语言环境/时区中转换为字符串格式,但NSDate没有时区的内部概念.NSDates不受任何特定区域的约束.如果您和世界上的任何其他人同时询问您的设备[NSDate日期],您将得到相同的结果 - 不是因为它总是以GMT返回,而是因为它不以特定于时区的方式返回.在可可,约会是地球历史上的一个特定时刻.如何撰写日期与您的日历,时区和区域设置有关.

你没有得到明天的约会,你得到了正确的日期,然后注意到它给出了一个不同的日子,如果用GMT表示的话.这是正确的日期,只是写得与你想要的不同.

'description'是从NSObject重写的方法.当您对NSLog一个对象时,内部发生的是调用description方法并打印返回的字符串.所以,你应该得到记录相同的结果object[object description],因为前者已经调用的描述,并打印字符串,后者来电说明然后调用生成的字符串描述,并打印.NSStrings作为描述的结果返回自己.

它应该是默认行为,但要获得有意义的描述,请尝试:

NSLog(@"%@", [[NSDate date] descriptionWithCalendarFormat:nil 
           timeZone:[NSTimeZone localTimeZone] locale:[NSLocale currentLocale]]);
Run Code Online (Sandbox Code Playgroud)

如果仍然以GMT登录,则您的设备认为自己处于GMT状态.我不知道模拟器对于那种东西有多可靠.

  • 我想指出,自OSX 10.10以来,方法` - descriptionWithCalendarFormat:timeZone:locale:`已被删除. (2认同)