在闰年,[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]
来获取当前日期实际上是不好的做法吗?我错过了一些重要的东西吗?
抱歉这个冗长的问题......
答案 0 :(得分:8)
我不知道你在哪里知道NSDate
不支持闰日,但这绝对是错误的。我相信你会感到困惑,因为现在在GMT中,日期字符串是2012-03-01 03:42:07 +0000
。这是正确的。在GMT,它已经是3月1日。但是,如果您要求当前区域设置中的日期(例如[[NSDate date] descriptionWithLocale:[NSLocale currentLocale]]
),您将获得正确的闰日值。在PST,对我来说,它是
2012年2月29日星期三太平洋标准时间下午7:42:46
请注意,NSDate
本身不是语言环境。我做的唯一更改是要求它使用当前语言环境而不是使用GMT返回字符串表示。我可以使用相同的日期对象并询问EST,它也会为我提供该时区的正确字符串。