iOS获取UTC时间戳

14

我想要获取UTC时间戳。不能像这样做 [[NSDate date] timeIntervalSince1970]; 因为它返回的是本地时区的时间戳。在iOS中,如何获取UTC的时间戳?

编辑

问题已解决,我可以使用 [[NSDate date] timeIntervalSince1970]; :)


3
您想使用哪个时区的时间戳? - ReeCube
1
我不想要任何时区 ;) 我只想要UNIX时间戳。如果我理解正确,在UNIX时间戳中没有时区。 - AYMADA
3
timeIntervalSince1970如何返回本地时区的时间戳? :P - ReeCube
1
哎呀,我太蠢了 : ) ,没关系。今天我只是工作太多了。: ) - AYMADA
3个回答

13

看Pawel在这里的回答:Get current date in milliseconds

他提到要使用 CFAbsoluteTimeGetCurrent();

这在这里有记录。

因为它是系统时间,只需校正与GMT的时间间隔偏移。

尽管如果你校正本地时区,使用您的代码也可以工作。

通过调用以下代码获取时区偏移量:

[[NSTimeZone systemTimeZone] secondsFromGMT];
或者
[[NSTimeZone systemTimeZone] secondsFromGMTForDate:[NSDate date]];

1
请参考以下链接获取答案:https://dev59.com/LWUq5IYBdhLWcg3wT-6D。 - ahwulf

7

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

6

timeIntervalSince1970函数返回的是UTC时间的double类型值(NSTimeInterval)。

如果需要获取32位表示的时间戳(例如和嵌入式系统进行交互),可以使用以下代码:

time_t timestamp = (time_t)[[NSDate date] timeIntervalSince1970];


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接