Ваши примеры выглядят правильно для меня.Я подозреваю, что ваше представление о том, как компьютер отслеживает и показывает, время перевернуто.Ваши комментарии означают, что вы думаете, TZ
используется для получения UTC из внутренних часов компьютера.Это не так.
Внутренне ваш Mac использует время UTC.Ваш Mac не"в CET".Это «в UTC со значением по умолчанию TZ
CET
».TZ
контролирует, как местное время получается из базового UTC, когда требуется локальная временная метка или смещение часового пояса.Если вы измените TZ
, то местные временные метки будут показаны в новом часовом поясе, но это не повлияет на внутреннее время компьютера в формате UTC.
Специально для вашего примера new Date()
даст вам объект Date
, представляющийтекущее времяСтроковое представление по умолчанию для объекта Date
- это время UTC.В вашем примере вы можете видеть, что это время, показанное как результат вызова new Date()
:
2019-02-04T10:30:23.053Z # Europe/Prague
, является временем UTC, потому что его часовой пояс отображается как Z
, указывая UTC.(Можно помнить, что это означает, что «Z» означает «Смещение нуля от UTC». Этот формат иногда называют «зулусским» временем, поскольку «Зулу» является кодовым словом фонетического алфавита ИКАО для «Z».) Если ваш комментарийутверждает, что это локальная европейская / пражская временная метка, тогда комментарий неправильный.
Результат второго new Date()
:
2019-02-04T10:31:40.968Z # 10:31! :D
также отображается в UTC и составляет околона минуту позже первого результата.Неважно, что TZ
для этого процесса отличается, потому что TZ
не влияет на временные метки UTC.
Чтобы посмотреть местное время, которое рассчитывается путем применения настройки TZ
к UTCвремя, полученное с часов компьютера, используйте метод toLocaleString
для объекта Date
.Если вы повторите этот тест, используя этот метод, вы увидите что-то вроде этого:
$ env TZ=Europe/Prague node
> now = new Date()
2019-02-04T20:26:40.408Z
> now.toLocaleString()
'Mon Feb 04 2019 21:26:40 GMT+0100 (CET)'
$ env TZ=America/New_York node
> now = new Date()
2019-02-04T20:27:12.438Z
> now.toLocaleString()
'Mon Feb 04 2019 15:27:12 GMT-0500 (EST)'
, что выглядит вполне разумно.
Кстати, Node или JavaScript, здесь нет ничего необычного,Так все работает.Например, команда date
:
$ env TZ=Europe/Prague date
Mon Feb 4 21:54:49 CET 2019
$ env TZ=America/New_York date
Mon Feb 4 15:54:51 EST 2019