【问题标题】:How do I preserve localtime() as an int when printing?打印时如何将 localtime() 保留为 int?
【发布时间】:2009-07-27 12:06:13
【问题描述】:

我正在尝试附加 localtime 的积分返回值(在 Perl 中),但我似乎无法避免将返回值转换为如下所示的内容:Sun Jul 26 16:34:49 2009 当我说本地时间打印时,我看到了我想要的,但是当我说 $foo = 本地时间,"";打印 $foo;我得到了字符串。 我想要那些数字。我尝试了 $foo = localtime() * 1 但它恢复到 1969 并获取了字符串。

非常混乱。

【问题讨论】:

  • print localtime 不会返回您认为的结果;那是所有数字的列表。

标签: perl localtime


【解决方案1】:

该字符串是 localtime 在标量上下文中返回的内容。它返回

( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime();

在列表上下文中。如果您只需要时间戳,请使用time。

【讨论】:

    【解决方案2】:

    Perl 根据上下文 以不同的方式处理事物。在标量上下文中,localtime 返回一个表示当前(本地)时间的字符串。在列表上下文中,它返回组成时间值的各个字段的列表。

    这个问题是因为print的语法引起的。

        * print FILEHANDLE LIST
        * print LIST
        * print
    

    由于print 需要一个列表,这会将localtime 置于列表上下文中,因此它返回代表秒、分钟、小时等的数字列表,然后由print 函数连接。分配给标量时,localtime 在标量上下文中并返回字符串。如果你想要这些数字的连接,你可以做类似的事情

    my $foo = join '', localtime;
    print $foo;
    

    然而,无论你在做什么,一个合适的纪元时间值可能会更有用。在这种情况下,您可以改用time。

    【讨论】:

    • 是的,我误解了这些数字是什么。我认为这是一个毫秒的邮票。我现在意识到这完全不是我想要的,而“时间”正是我所需要的。
    【解决方案3】:

    如果您认为自己知道函数的作用,但实际上并没有这样做,请查看文档。我经常查看localtime 文档,因为我永远记不起这些值的出现顺序。

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 2020-07-03
      • 2018-06-03
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      相关资源
      最近更新 更多