[NSDate日期]和闰年的问题



在闰年,[NSDate date]返回2012-03-01 HH:MM:SS +TTTT

在stackoverflow上,我经常看到这样的帖子:只需调用[NSDate date]就可以检索到今天的日期。问题是,在闰年,这不会返回正确的日期。现在我明白了闰年实际上是日历系统的函数,所以NSDate不会识别闰年(或者夏令时)是有道理的。然而,这有可能破坏代码——例如:

假设您通过执行以下操作指定文件修改日期:

// assume today's date is 2012-02-29 10:00:00 +0000
NSDate *fileModificationDate = [NSDate date];    // 2012-03-01 10:00:00 +0000 is returned

然后在未来的某个时候,你会进行比较,看看文件最后一次修改是什么时候:

// assume it's the next day at 9 AM, ie 2012-03-01 09:00 +0000
NSTimeInterval timeSinceLastModification = [fileModificationDate timeIntervalSinceNow];

返回的timeSinceLasModification将是正的,表示未来的某个时间毫无意义!

我的问题是:使用[NSDate date]来获取当前日期实际上是一种糟糕的做法吗?我是不是错过了什么重要的东西?

很抱歉问了这么长的问题。。。

我不知道你从哪里得到NSDate不支持闰日的想法,但这是绝对错误的。我相信你会感到困惑,因为现在在GMT,日期字符串是2012-03-01 03:42:07 +0000。这是正确的。格林尼治标准时间已经是3月1日了。但是,如果您询问当前区域设置中的日期(例如[[NSDate date] descriptionWithLocale:[NSLocale currentLocale]]),您将得到闰日的正确值。对我来说,在太平洋标准时间,这是

2012年2月29日星期三下午7:42:46太平洋标准时间

请注意,NSDate本身不知道区域设置。我所做的唯一更改是要求它使用当前区域设置而不是GMT返回字符串表示。我可以使用相同的日期对象并请求EST,它也会为我提供该时区的正确字符串。

最新更新