Команда Perl one liner для преобразования времени EST в время по Гринвичу - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь создать однострочную команду в Perl, чтобы преобразовать время EST в время по Гринвичу и напечатать результат. Я использую модуль «DateTime» для достижения этой цели.

Команда, которую я попробовал:

perl -MDateTime=set_Time_Zone -e "DateTime->new(year=>2019,month=>5,day=>10,hour=>18,minute=>40,time_zone=>EST)" -e "$dt->set_time_zone(GMT)"

выдает ошибку

Невозможно вызвать метод "set_time_zone" для неопределенного значения в строке -e 2.

Как вызвать метод и вывести час в GMT?

Ответы [ 2 ]

3 голосов
/ 05 мая 2019

Четыре проблемы:

  1. DateTime не экспортирует set_Time_Zone.
  2. Вы используете $dt, даже не присвоив ему значение. (Это то, что выдает сообщение об ошибке.)
  3. «EST» не является стандартным названием часового пояса, и его следует избегать. Это может относиться к восточному стандартному времени (UTC-0500), часовому поясу, который в основном не используется 10 мая. Если это так, укажите -0500.
  4. Вы ничего не печатаете.

Если вы действительно имели в виду Восточное стандартное время (несмотря на то, что оно не использовалось 10 мая в местах, где наблюдается летнее время), используйте следующее:

perl -MDateTime -le'print DateTime->new(...,time_zone=>"-0500")->set_time_zone("UTC")'

Скорее всего, вы имели в виду восточное дневное время. Если это так, используйте следующее:

perl -MDateTime -le'print DateTime->new(...,time_zone=>"-0400")->set_time_zone("UTC")'

Вместо использования фиксированных смещений вы можете указать географически основанные имена из базы данных tz. При их использовании DateTime учитывает, используется ли DST для рассматриваемой даты-времени, и использует соответствующее смещение. Это делается следующим образом:

perl -MDateTime -le'print DateTime->new(...,time_zone=>"America/New_York")->set_time_zone("UTC")'

Наконец, вот как вы должны указать DateTime использовать местный часовой пояс:

perl -MDateTime -le'print DateTime->new(...,time_zone=>"local")->set_time_zone("UTC")'

Примечания:

  • Если вам нужен другой формат вывода, вы можете использовать ->strftime(...).
  • При использовании командной оболочки Windows поменяйте местами ' и ".
0 голосов
/ 05 мая 2019

Где вы думаете, $dt установлен?И как это будет печатать без print()?Попробуйте:

perl -MDateTime=set_Time_Zone -e "print(DateTime->new(year=>2019,month=>5,day=>10,hour=>18,minute=>40,time_zone=>EST)->set_time_zone(GMT));"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...