Подтвердить что ты не робот

Получить время UTC в секундах

Похоже, мне не удается получить вторую дату UTC bash. Я в Сиднее, так что + 10 часов UTC время

 date
 Thu Jul 3 17:28:19 WST 2014

 date -u
 Thu Jul 3 07:28:20 UTC 2014

Но когда я попытался преобразовать его, я получаю тот же результат, который не является временем UTC

 date +%s
 1404372514

 date -u +%s
 1404372515

Что мне здесь не хватает?


После получения ответа, в котором говорилось, что date +%s возвращает время UTC, вот подробности о проблеме, с которой я сейчас сталкиваюсь.

Я пытаюсь сравнить дату, написанную в файле с помощью python. Эта дата записывается в секундах в UTC. И bash date +%s не дает мне то же самое. На самом деле, если я делаю в python time.asctime(time.localtime(date_in_seconds_from_bash)), я получаю текущее время Сиднея, а не UTC. Я не понимаю.

4b9b3361

Ответ 1

Я считаю, что +%s - секунды с начала эпохи. Это часовой пояс инвариант.

Ответ 2

Готов поспорить, вот что было задумано.

$ date -u [email protected]404372514
Thu Jul  3 07:28:34 UTC 2014

Ответ 3

Вы говорите, что используете:

time.asctime(time.localtime(date_in_seconds_from_bash))

где date_in_seconds_from_bash - предположительно выход date +%s.

Функция time.localtime, как следует из названия, дает вам местное время.

Если вы хотите UTC, используйте time.gmtime(), а не time.localtime().

Как Ответ JamesNoonan33 говорит, что результат date +%s является инвариантом часового пояса, поэтому date +%s в точности эквивалентен date -u %s. Он печатает количество секунд с "эпохи", которое составляет 1970-01-01 00:00:00 UTC. Результат, который вы показываете в своем вопросе, полностью согласуется с этим:

date -u
Thu Jul 3 07:28:20 UTC 2014

date +%s
1404372514   # 14 seconds after "date -u" command

date -u +%s
1404372515   # 15 seconds after "date -u" command

Ответ 4

Можно рассмотреть возможность добавления этой строки в ~/.bash_profile (или аналогичный), чтобы можно было быстро получить текущий UTC как в текущем времени, так и в секундах с начала эпохи.

alias utc='date -u && date -u +%s'