我正在尝试在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”。
如何调用方法并在格林尼治标准时间打印小时?
答案 0 :(得分:3)
四个问题:
set_Time_Zone
。$dt
时并没有赋予它任何价值。 (这就是产生错误消息的原因。)-0500
。如果您确实是说东部标准时间(尽管在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(...)
。'
和"
。答案 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));"