在闰年,[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,它也会为我提供该时区的正确字符串。