iOS получить временную метку UTC

Я хотел бы получить временную метку UTC. Я не могу сделать это так [[NSDate date] timeIntervalSince1970]; потому что он возвращает отметку времени в локальном часовом поясе. Как я могу получить временную метку в UTC в iOS?

редактировать

Решенный Я могу использовать [[NSDate date] timeIntervalSince1970]; :)

Ответ 1

См. Ответ Pawel здесь: Получить текущую дату в миллисекундах

Он ссылается на использование CFAbsoluteTimeGetCurrent();

который описан здесь.

Поскольку это системное время, просто исправьте смещение временного интервала к GMT.

Тем не менее использование вашего кода работает, если вы исправите локальный часовой пояс.

Вы получаете смещение временной зоны, вызывая

[[NSTimeZone systemTimeZone] secondsFromGMT];

или

[[NSTimeZone systemTimeZone] secondsFromGMTForDate:[NSDate date]];

Ответ 2

Just TimeIntervalSince1970 возвращает время UTC как двойное (NSTimeInterval)

Чтобы получить 32-битное представление (возможно, для взаимодействия со встроенными системами):

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

Ответ 3

Быстрое Решение

Используйте timeIntervalSince1970 чтобы получить метку времени UTC.

let secondsSince1970: TimeInterval = Date().timeIntervalSince1970

Если вы хотите работать с DateFormatter, используйте 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