如何获取当前日期

时间:2016-01-09 02:03:00

标签: ios objective-c iphone nsdate

我使用以下代码获取当前日期:

-(NSDate*) timeStampDate {
    NSDate* currentDate = [NSDate date];

    return [NSDate dateWithTimeInterval:
            [[NSTimeZone defaultTimeZone] secondsFromGMTForDate: currentDate]
                              sinceDate: currentDate];
}

当我在保存后立即显示此日期时,使用category将其置于简单的英语中,它给了我“5小时前”。因为我在纽约,这告诉我日期实际上是格林威治日期。任何人都可以向我解释上面的代码是做什么的。

2 个答案:

答案 0 :(得分:2)

您获得的是当前日期:[NSDate date]

然后您将获得该日期默认时区与GMT之间的秒数:[[NSTimeZone defaultTimeZone] secondsFromGMTForDate: currentDate]

然后你计算一个新的日期,即当前日期+那些秒。间隔为负,因此您要计算过去的日期:[NSDate dateWithTimerInterval:-seconds sinceDate:currentDate

由于您的间隔时间是-5小时,从现在开始减去,然后您计算了一个确实是“5小时前”的新日期。

如果您的目标是在GMT中获得时间,我建议您使用日期格式化程序,如此处最高投票答案所示:NSDate - Convert Date to GMT

答案 1 :(得分:0)

我不明白为什么这个结果看起来不合逻辑 - 你现在要求GMT在你现在所在的时区停留几秒钟,就像你说的那样大约五个小时。如果日期是任何"较旧的",则秒数会更长。

所有NSDate都是独立于任何特定时区而创建和生活的,但这并不重要。