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