У меня работает сервер с часовым поясом UTC
. Казалось, что это в целом хорошая практика (пожалуйста, поправьте меня, если я ошибаюсь).
Во всяком случае, один из серверов, к которым я подключаюсь, для scp
файлов работает EDT
и хранит файлы, которые мне нужно скопировать в формате/path/to/filename/data20120913
Я посмотрел на попытку rsync
файлов, используя что-то вроде -mtime -1
флага find для файлов, измененных в последний день, но мне не повезло.
Я не возражаю против того, scp
чтобы просто использовать для копирования файл текущего дня, но на данный момент есть 4-часовое окно, в котором запуск date +%Y%m%d
даст разные дни на каждом сервере, и это немного меня беспокоит.
Просматривая, man date
я вижу, что у меня может быть вывод времени как UTC
, но я не вижу способа, чтобы он выводился как другой часовой пояс, напримерEDT
Я полагаю, что я мог бы также использовать что-то вроде GNU
расширения даты, date -d 20100909 +%s
чтобы получить дату в секундах от эпохи, применить ручной 4 * 60 * 60
подсчет секунд и посмотреть, как это будет выглядеть как дата - но тогда, когда наступит дневное время, все равно будет час ,
Есть ли более простой способ вывода даты в YYYYMMDD
формате для EDT
на сервере, который установлен в UTC
?
Ответы:
Вы можете установить часовой пояс для продолжительности запроса, таким образом:
Обратите внимание на пробел между
TZ
настройкой иdate
командой. В Bourne-like и-likerc
shell, который устанавливаетTZ
переменную только для командной строки. В других оболочках (csh
,tcsh
,fish
), вы всегда можете использоватьenv
команду вместо:ТЛ; др
В системах Linux. часовые пояса определяются в файлах в
/usr/share/zoneinfo
каталоге. Эту структуру часто называют «базой данных Олсона», чтобы почтить ее основателя.Правила для каждого часового пояса определяются как строки текстового файла, которые затем компилируются в двоичный файл. Скомпилированные строки определяют имя зоны; диапазон данных и время, в течение которого применяется зона; смещение от UTC для стандартного времени; и примечание для определения того, как происходит переход на летнее время и обратно, если это применимо.
Например, каталог «Америка» содержит необходимую информацию для Нью-Йорка в указанном выше файле
America/New_York
.Помните, что спецификация несуществующей зоны (имя файла) игнорируется и сообщается время UTC. Например, это сообщает о неправильном времени:
В Единой спецификации UNIX версии 3, известной как SUSv3 или POSIX-2001, отмечается, что для переносимости строка символов, которая идентифицирует описание часового пояса, должна начинаться с символа двоеточия. Таким образом, мы также можем написать:
В качестве альтернативного метода спецификации часовых поясов, использующего путь к файлу описания, SUSv3 описывает модель POSIX. В этом формате строка определяется как:
где
std
- стандартное имя компонента иdst
летнее. Каждое имя состоит из трех или более символов. Этоoffset
положительно для часовых поясов к западу от основного меридиана и отрицательно для тех к востоку от меридиана. Смещение добавляется к местному времени, чтобы получить UTC (ранее известное как GMT).start
Иend
поля времени указывают , когда происходят стандарт / дневного света переходы.Например, в восточной части Соединенных Штатов стандартное время на 5 часов раньше, чем в формате UTC, и мы можем указать
EST5EDT
вместоAmerica/New_York
. Однако эти альтернативы не всегда признаются, особенно для зон за пределами Соединенных Штатов, и их лучше избегать.HP-UX (UNIX, совместимый с SUSv3) использует текстовые правила
/usr/lib/tztab
и имена POSIX, такие как EST5EDT, CST6CDT, MST7MDT, PST8PDT. Файл включает в себя все исторические правила для каждого часового пояса, родственные базе данных Олсона.Примечание: Вы должны быть в состоянии найти все часовые пояса, проверив следующий каталог:
/usr/share/zoneinfo
.источник
export
выглядит лучше, чемenv
командаВы можете сделать это, манипулируя
TZ
переменной окружения. Следующее даст вам местное время для США / Восточной, которое также будет достаточно умным для обработки DST, когда это происходит:Название зоны происходит из файлов и каталогов внутри
/usr/share/zoneinfo
.источник
Быть осторожен! Дата с радостью покажет время в вашем текущем часовом поясе, если вы дадите ему часовой пояс, который он не распознает.
Проверь это:
Обратите внимание, что нет часового пояса с именем EDT. Собственно говоря,
возвращается
И это работает:
Однако, если ваш друг живет в мистической стране Gobbledygook, и информация о его зоне совпадает с вашей собственной, вы можете указать дату и время в зоне Gobbledygook, и он с радостью сделает это с нулевым значением выхода, чтобы вы знали, что зона ему не известна:
источник
TZ
строка возвращает время UTC.источник
Дата синтаксис аркана и подвержены ошибкам, что делает командную строку вызов боли. Поэтому я написал небольшой скрипт (я назвал его worldtime ), который будет печатать указанное (или текущее) время из базового часового пояса (вашего локального) в некоторых других часовых поясах и наоборот.
Вот. Настройте его в соответствии с вашими потребностями, поместите его на свой путь и сделайте его исполняемым.
источник
Часто у вас есть временная метка в местном часовом поясе, и вам нужно преобразовать ее в удаленный tz. Это можно сделать с помощью:
где:
источник