【问题标题】:Perl one liner command to convert EST time to GMT timePerl 一个线性命令将 EST 时间转换为 GMT 时间
【发布时间】:2019-09-23 00:44:40
【问题描述】:

我正在尝试在 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”。

如何调用方法并打印 GMT 小时数?

【问题讨论】:

    标签: perl timezone


    【解决方案1】:

    四个问题:

    1. 日期时间不导出set_Time_Zone
    2. 您使用$dt 却没有给它一个值。 (这就是产生错误消息的原因。)
    3. “EST”不是标准时区名称,应避免使用。它可以指东部标准时间 (UTC-0500),这是一个在 5 月 10 日大部分未使用的时区。如果是这样,请指定 -0500
    4. 您不打印任何内容。

    如果您确实指的是东部标准时间(尽管在遵守 DST 的地方没有在 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 命令外壳,请交换 '"

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-08-26
        • 2015-08-04
        • 2014-06-25
        • 2012-06-15
        • 1970-01-01
        • 1970-01-01
        • 2013-01-01
        • 1970-01-01
        • 2013-10-29
        相关资源
        最近更新 更多