iPhone - 考虑夏令时的当前日期

Spa*_*Dog 8 iphone

我的国家位于GMT + 0.我们现在是+1小时,因为我们正在夏令时.

当我做

[NSDate date];
Run Code Online (Sandbox Code Playgroud)

它应该返回当前的日期和时间,但是当我这样做时,我收到GMT时间而不考虑夏令时.

这就是文档对date命令的说法

创建并返回设置为当前日期和时间的新日期.

为什么Apple会对我们这样做?为什么一切都如此复杂?这是一个错误吗?有没有办法获得设备当前的实时时间?同一时间显示在设备的时钟上?

我的应用程序取决于日期和时间,并且对于位于夏季或冬季的世界不同时区的用户来说,错误的日期将是一场灾难.

谢谢.


编辑

经过几个答案后,我尝试了这段代码:

NSDate *wrongToday = [NSDate date];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];

[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *currentTime = [dateFormatter wrongToday];

NSDate *today = [dateFormatter dateFromString:currentTime];
Run Code Online (Sandbox Code Playgroud)

猜怎么着,今天=错误今天...换句话说,没有变化,我继续错误的日期没有夏令时.更令人惊奇的是,currentTime在NSString中显示了夏令时的日期......

任何线索?再次感谢.

pau*_*sm4 8

albertamg,MRAB和Joe Osborn都是正确的.他们都试图向你解释NSDate是一个"数字","一个绝对的时刻".

无论您是在伦敦,洛杉矶还是在新加坡,这个价值都是独立的.它与您的县是否尊重夏令时无关.

要根据可识别的东西(如"7月28日下午4:28")来解释 NSDate,你需要一个NSDateFormatter.您还需要确保正确定义了区域设置:包括时区,是否遵守夏令时以及各种时间/日期格式约定.

'希望有所帮助..


Joe*_*orn 2

网站上已经有一些很好的答案,这里这里这里。AnNSDate是自 (UTC) 参考日期以来的一个时间间隔,但您可以NSTimeZone按照这些答案中的详细说明使用。