ls в cmd окне дает один час от времени

Я имею ls установленный на моем компьютере Windows XP. Это шло с msysgit. У меня был он некоторое время, и оказывается, что я использую его довольно много даже в командной строке DOS. Больше, чем dir.

Вещь состоит в том, что это дает мне метки времени с одним смещением часа. Посмотрите дату gcc.exe, ls говорит 15:01, dir говорит 16:01:

C:\MinGW\bin>ls --full-time gcc.exe
-rwxr-xr-x    1 gaf      Administ    90112 Thu Apr 24 15:01:53 2008 gcc.exe

C:\MinGW\bin>dir gcc.exe
 Volymen i enhet C har ingen etikett.
 Volymens serienummer är 644A-83A3

 Innehåll i katalogen C:\MinGW\bin

2008-04-24  16:01            90 112 gcc.exe
               1 fil(er)              90 112 byte
           0 katalog(er)  104 458 203 136 byte ledigt

(жаль о странном языке)

Я могу сказать, что это ls это делает его неправильно, я проверил это с недавно созданными файлами.

Это является довольно тревожащим, какое-либо предложение о том, как я могу решить это?


Править: больше информации добавило после ответа njd.

При замене огибающей TZ действительно имеет эффект. Я живу в Швеции, где временем является CET зимой, ПОЯС летом. Я протестировал и UTC, CET и ПОЯС, и достиг странный (меня) результаты:

C:\Program\Git\bin>set TZ=UTC

C:\Program\Git\bin>.\date
Mon Feb 15 12:53:26 GMT 2010

C:\Program\Git\bin>set TZ=CET

C:\Program\Git\bin>.\date
Mon Feb 15 12:53:50 GMT 2010

C:\Program\Git\bin>set TZ=CEST

C:\Program\Git\bin>.\date
Mon Feb 15 12:53:59 GMT 2010

C:\Program\Git\bin>set TZ=CET+1

C:\Program\Git\bin>.\date
Mon Feb 15 11:54:27 CET 2010

C:\Program\Git\bin>set TZ=CET-1

C:\Program\Git\bin>.\date
Mon Feb 15 13:54:35 CET 2010

Установка TZ к CET или ПОЯСУ не имеет никакого эффекта. Отображенная дата все еще GMT. Кажется, что строка одно только CET не имеет никакого эффекта. Действительно ли это - только строка для отображения и только принято во внимание, если существует явное смещение.

C:\Program\Git\bin>set TZ=FOO-1

C:\Program\Git\bin>.\date
Mon Feb 15 14:00:29 FOO 2010

C:\Program\Git\bin>set TZ=BAR-1

C:\Program\Git\bin>.\date
Mon Feb 15 14:00:42 BAR 2010

Таким образом, это кажется.

- 1 имеет корректный эффект. Но шведское время является UTC+1: CET на Википедию

В конвенции существует ли несоответствие,-1 в TZ UTC+1?

Если я хочу позволить ОС решить, является ли это лето или зима, как обозначено в ответе njd, я могу опустить запуск и время окончания. Я предполагаю, что корректная строка TZ=CET-1CEST-2, это корректно?

Я не уверен, какие окна делает в летнем периоде. Если это обновит сами часы, то строка выше не будет работать. Если это обновляет смещение только, то это могло бы работать. Больше понимания?

3
задан 22.02.2010, 06:57

1 ответ

Похоже, что команда ls не знает достаточно в европейское время-zomes и даты, когда ПОЯС в действительности.

Я предполагаю, что 16:01, о котором сообщает DIR, было 16:01 ПОЯСА, но ls команда не применила дополнительный час для перехода на летнее время.

Я не уверен, как msysgit (или просто msys) хранит информацию часового пояса: в Солярисе существуют zoneinfo файлы для этого.

Если существует некоторый способ связаться с Вашими msysgit инструментами, когда переход на летнее время начинается и заканчивается, то Ваш ls команда могла разобраться в нем.

Возможно, эта страница предлагает подсказку.
Попытайтесь играть вокруг с параметрами среды как

SET TZ=CET+1CEST,M3.5.0/2,M10.5.0/2

который указывает, что ПОЯС начинается в прошлое воскресенье (день 0) марта в 2:00 и заканчивается в прошлое воскресенье октября в 2:00. Это должно дать Вам что-то для работы с.

(Обычно, было бы достаточно указать часовой пояс и часовой пояс DST только: "CET+1CEST" и полагаются на ОС для знания, каковы соответствующие даты должны быть. Но здесь мы назначаем даты явно.)

Я вижу что-то подобный случай наоборот с MSys в моей системе:
Файл, о котором сообщает команда DIR (и Windows Explorer), как записано 18.04.2008 в 12:19 (который должен был быть BST: GMT+1), показан MSys ls как 13:19:06.

Если я играю вокруг с датами часового пояса и SET TZ как будто DST не начался до конца апреля я могу изменить это для соответствия выводу DIR.

Но насколько я знаю, правило в масштабах ЕС о Летнем периоде состоит в том, что он начинается в прошлое воскресенье марта (M3.5.0/2) и заканчивается в прошлое воскресенье октября (M10.5.0/2).

Таким образом, когда я ввожу (в оболочке MSys, или в Cygwin, или в Unix):

TZ=GMT0BST,M3.5.0/2,M10.5.0/2 ls --full-time foo

Я должен видеть корректное время с примененным DST. На самом деле я вижу 13:19, все равно как тогда, когда я не устанавливаю часовой пояс вообще.

Который заставляет меня задаться вопросом, разбираются ли MSys и msysgit в нем, и Windows понимает его превратно.

4
ответ дан 08.12.2019, 00:37

Теги

Похожие вопросы