Я имею 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
, это корректно?
Я не уверен, какие окна делает в летнем периоде. Если это обновит сами часы, то строка выше не будет работать. Если это обновляет смещение только, то это могло бы работать. Больше понимания?
Похоже, что команда 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 понимает его превратно.