Perl一个线性命令将EST时间转换为GMT时间

时间:2019-05-04 22:17:53

标签: perl timezone

我正在尝试在Perl中构建一个单行命令,以将EST日期时间转换为GMT时间并打印结果。我正在使用“ 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)"

抛出的错误是

  

无法在-e第2行的未定义值上调用方法“ set_time_zone”。

如何调用方法并在格林尼治标准时间打印小时?

2 个答案:

答案 0 :(得分:3)

四个问题:

  1. DateTime不会导出set_Time_Zone
  2. 您在使用$dt时并没有赋予它任何价值。 (这就是产生错误消息的原因。)
  3. “ EST”不是标准时区名称,应避免使用。它可能指的是东部标准时间(UTC-0500),这是5月10日大部分未使用的时区。如果是这样,请改为指定-0500
  4. 您什么都不打印。

如果您确实是说东部标准时间(尽管在5月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命令外壳,则交换'"

答案 1 :(得分:0)

您认为$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));"