如何获取当前日期

How to Get Current Date

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

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

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

当我在保存后立即显示此日期时,使用 category 将其转换为简单的英语,它给了我“5 小时前”。当我在纽约时,这对我来说表明日期确实是格林威治日期。谁能向我解释一下上面的代码到底在做什么。

我不明白为什么这个结果看起来不合逻辑 - 你现在要求从格林威治标准时间开始你所在的时区,这大约是你说的五个小时。如果日期是 "older",秒数会更大。

所有 NSDates 的创建和运行都独立于任何特定时区,但这并不重要。

您正在获取当前日期:[NSDate date]

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

那么您正在计算一个新日期,即当前日期 + 这些秒数。间隔为负,因此您计算的是过去的日期:[NSDate dateWithTimerInterval:-seconds sinceDate:currentDate

由于你的间隔是 -5 小时,从现在减去,那么你计算出的新日期确实是“5 小时前”。

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