我想要获取UTC时间戳。不能像这样做 [[NSDate date] timeIntervalSince1970];
因为它返回的是本地时区的时间戳。在iOS中,如何获取UTC的时间戳?
编辑
问题已解决,我可以使用 [[NSDate date] timeIntervalSince1970];
:)
我想要获取UTC时间戳。不能像这样做 [[NSDate date] timeIntervalSince1970];
因为它返回的是本地时区的时间戳。在iOS中,如何获取UTC的时间戳?
问题已解决,我可以使用 [[NSDate date] timeIntervalSince1970];
:)
看Pawel在这里的回答:Get current date in milliseconds
他提到要使用 CFAbsoluteTimeGetCurrent();
这在这里有记录。
因为它是系统时间,只需校正与GMT的时间间隔偏移。
尽管如果你校正本地时区,使用您的代码也可以工作。
通过调用以下代码获取时区偏移量:
[[NSTimeZone systemTimeZone] secondsFromGMT];
或者[[NSTimeZone systemTimeZone] secondsFromGMTForDate:[NSDate date]];
Swift解决方案
使用timeIntervalSince1970
获取UTC时间戳。
let secondsSince1970: TimeInterval = Date().timeIntervalSince1970
如果您想使用时区,请使用DateFormatter
。
let date = Date()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss z"
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
print(dateFormatter.string(from: date))
// output: 2019-01-10 00:24:12 GMT
dateFormatter.timeZone = TimeZone(abbreviation: "America/Los_Angeles")
print(dateFormatter.string(from: date))
// output: 2019-01-09 16:24:12 PST
timeIntervalSince1970函数返回的是UTC时间的double类型值(NSTimeInterval)。
如果需要获取32位表示的时间戳(例如和嵌入式系统进行交互),可以使用以下代码:
time_t timestamp = (time_t)[[NSDate date] timeIntervalSince1970];