К какому часовому поясу относится летнее время?

Я использую WSL с ubuntu 16.04, и сегодня у меня возникли проблемы с сетью. Вот какие выходные данные

$ date
Thu Sep 21 13:37:00 DST 2017

Что означает DST? Я знаю, что это означает «летнее время», но это не название часового пояса. Я подозреваю, что это надуманный часовой пояс, который меняется в день равноденствия, что объяснило бы мою сегодняшнюю проблему.

Я смог решить свою проблему, установив часовой пояс на US/Pacific, что изменило вывод на PDT:

$ date
Thu Sep 21 13:37:00 PDT 2017

Однако у меня есть вторая машина с той же проблемой, и мне любопытно, в каком часовом поясе она думает.

Есть ли способ получить из системы строку X/Y (имя базы данных Olson), которая соответствует DST?


person Eric    schedule 21.09.2017    source источник
comment
У меня есть программное обеспечение, которое может выполнять поиск в базе данных IANA / Olson сокращений, используемых в течение местного времени (github.com/HowardHinnant/date/wiki/). Я запустил это программное обеспечение с вашей меткой времени, и оно оказалось пустым. Не существует часовых поясов IANA, в которых используется сокращение DST с этой местной меткой времени. Для проверки работоспособности я повторно запустил поиск с помощью PDT и нашел 6 кандидатов.   -  person Howard Hinnant    schedule 22.09.2017


Ответы (3)


TL; DR WSL динамически создает файл с поддельной информацией о часовом поясе в /usr/share/zoneinfo/Msft/localtime, который жестко связан с /etc/localtime. В файле Msft используются выдуманные имена DST или STD, и они не обозначают определенный часовой пояс.


На самом деле происходит то, что WSL пытается сопоставить ваш часовой пояс Windows в Linux. Это нетривиальное сопоставление, как показано здесь ( обсуждение). Поэтому я считаю, что вместо того, чтобы пытаться поразить постоянно движущуюся цель, WSL использует Windows API, чтобы получить информацию о часовом поясе Windows, и на основе этой информации он динамически генерирует файл информации о часовом поясе.

Я считаю, что wslhost (в частности, код в C:\Windows\System32\lxss\LxssManager.dll) выполняет эту проверку в вашем текущем часовом поясе в Windows и записывает в файл /usr/share/zoneinfo/Msft/localtime. Вот почему при изменении часового пояса в Windows вы мгновенно видите влияние уже запущенного WSL. Но поскольку не существует идеального сопоставления часовых поясов Windows с часовыми поясами Linux или POSIX, wslhost, вероятно, просто wings название, и именно здесь DST вступает в игру.

Обновление: На самом деле, я думаю, он просто говорит "DST", если вы находитесь в часовом поясе Daylight Saving Zone, и "STD" для часового пояса, отличного от DST (я предполагаю, Standard).

Таким образом, ответ на вопрос «Какой часовой пояс означает DST?» - нет, и любая программа Linux, которая попытается сопоставить /etc/localtime с файлом часового пояса в /usr/share/zoneinfo (через ссылку для чтения или просто поиск), будет получать только «Msft / localtime» в качестве отвечать. Ответ "Технически точный, но совершенно бесполезный".

person Andy    schedule 01.09.2018

ОБНОВЛЕНИЕ: этот ответ, скорее всего, неверен; вывод, о котором сообщает OP, не согласуется с моей гипотезой.

Я считаю, что это нераспознанный часовой пояс, интерпретируемый командой date как UTC.

В моей системе Ubuntu 14.04:

$ date -u ; TZ=DST date ; TZ=NOSUCHTIMEZONE date
Thu Sep 21 21:04:44 UTC 2017
Thu Sep 21 21:04:44 DST 2017
Thu Sep 21 21:04:44 NOSUCHTIMEZONE 2017
$ 

Вероятно, что-то установило для вашей переменной среды $TZ значение DST.

Проверьте свою среду (echo $TZ). Если он не печатает DST, я ошибаюсь. (РЕДАКТИРОВАТЬ: OP говорит, что $TZ пусто.)

(Нет ничего, что называется DST под /usr/share/zoneinfo.)

person Keith Thompson    schedule 21.09.2017
comment
Но тот факт, что вы показываете одно и то же время 13:37:00 для DST и PDT, говорит об обратном. Это буквально результат, который вы получили? - person Keith Thompson; 22.09.2017
comment
Да, после запуска sudo dpkg-reconfigure tzdata, вот что я получил. date +%z на сломанной машине выдает -0700. Возможно, я спешу с выводами, но мне кажется подозрительным, что у меня начались проблемы с переходом на летнее время в день равноденствия. Я не знаю, какой результат вчера был у date - person Eric; 22.09.2017
comment
$TZ пусто. - person Eric; 22.09.2017
comment
@ Эрик: Что в /etc/timezone? - person Keith Thompson; 22.09.2017
comment
Этот файл не существует в сломанной системе - кажется, что WSL не создает его по умолчанию - person Eric; 22.09.2017
comment
Здесь хватается за соломинку. Может ли в вашем окружении быть что-то еще? Попробуйте env | egrep -i 'zone|tz|dst'. Или env | less и искать что-нибудь странное. TZ=DST date дает другой результат, чем date? Выберите дату, когда не летнее время: date -d 2018-01-01 - person Keith Thompson; 22.09.2017
comment
В моей системе /etc/localtime является символической ссылкой на /usr/share/zoneinfo/America/Los_Angeles. Что это по твоему? Это в основном двоичный файл со строкой простого текста в конце; что показывает tail -n 1 /etc/localtime? Кроме того, date +%Z печатает DST? - person Keith Thompson; 22.09.2017

Насколько мне известно, летнее время в этом случае действительно относится к летнему времени.

Ubuntu печально известна ошибками, связанными с настройкой DST: https://askubuntu.com/questions/595569/update-time-for-daylight-savings-time-set-system-clock-to-utc-time-and-stay-in

person Cmaiek    schedule 21.09.2017
comment
Верно, но в каком часовом поясе DST? - person Eric; 21.09.2017
comment
Может быть нет; смотри мой ответ. - person Keith Thompson; 22.09.2017