Я пытаюсь написать сценарий bash, который принимает пользовательский ввод определенной даты в формате, таком как MM/DD/YYYY, и возвращает, была ли эта конкретная дата во время летнего времени или нет. Есть ли определенная функция, которая проверяет это? Есть ли способ выполнения команды date? Я использую RHEL 6.4.Обнаружение DST с даты, введенной пользователем в bash
ответ
Вы можете получить дату GNU сказать вам часовой пояс языке Генеральный Общие Аббревиатура. Это изменится, если DST действует:
TZ=US/Pacific date --date '2015/05/12' +%Z
возвратов:
PDT
И:
TZ=US/Pacific date --date '2015/12/12' +%Z
возвратов:
PST
Я не вижу способ получить, действует ли DST явно от date
, но в зависимости от того, что вы пытаетесь выполнить, это может решить вашу проблему.
Я хотел бы использовать модуль Perl DateTime для этого:
perl -MDateTime -E '
($y, $m, $d) = split(/-/, shift);
$dt = DateTime->new(year=>$y, month=>$m, day=>$d, time_zone=>"local");
say $dt->is_dst;
' "2015-06-15"
1
perl -MDateTime -E '
($y, $m, $d) = split(/-/, shift);
$dt = DateTime->new(year=>$y, month=>$m, day=>$d, time_zone=>"local");
say $dt->is_dst;
' "2015-01-15"
0
Помните, что многие часовые пояса не используют DST, Asia/Tokyo и Canada/Saskatchewan, являющиеся двумя. –
Спасибо за ответ. Я посмотрю на perl для этой проблемы. – conman1985
Спасибо за помощь !! Я полностью забыл, что часовой пояс изменился, когда он был в летнее время. Благодарю. – conman1985
* часовой пояс * не меняется. Это по-прежнему 'US/Pacific'. Часовой пояс * смещение * изменяется, как и связанный с ним часовой пояс * аббревиатура *. –
Обновлен ответ, чтобы быть более четким. – Julian