【问题标题】:How can I display the current date and time, including microseconds?如何显示当前日期和时间,包括微秒?
【发布时间】:2016-09-23 10:42:50
【问题描述】:

我需要在我的一个程序中以以下格式显示日期:

day - month - year "HH:MM:SS". <microseconds>

我正在使用 Perl 5.8,我尝试使用纪元秒并将时间转换为微秒,如下所示:

my $epoch = time();
my $time1 = ($epoch - int($epoch)) *1e6

但是我得到了这个输出:

25-05-2016 18:20:20.<incorrect number>

【问题讨论】:

  • 使用 Time::HiRes 获取微秒:perldoc.perl.org/Time/HiRes.html
  • HH:MM:SS.
  • @ruby 抱歉,我现在看到了。编辑器正在剥离 &lt;microseconds&gt;,因为它认为这是一个 HTML 标记。以后,请按照我上面所做的那样格式化您的输入、输出和代码,以避免这种混淆。
  • 我可以参考的 TimeHires 的任何示例,因为我尝试使用 gettimeofday() 但它不起作用

标签: perl datetime


【解决方案1】:

为了得到你想要的,

use POSIX       qw( strftime );
use Time::HiRes qw( time );

my $epoch = time();
my $microsecs = ($epoch - int($epoch)) *1e6;

say strftime("%d-%m-%Y %H:%M:%S", localtime($epoch)) . "." . sprintf("%06.0f", $microsecs);

输出:

25-05-2016 10:50:01.088676

sprintf 用于填充和四舍五入到最接近的微秒。


替代方案:

use POSIX       qw( strftime );
use Time::HiRes qw( gettimeofday );

my ($epoch, $microsecs) = gettimeofday();

say strftime("%d-%m-%Y %H:%M:%S", localtime($epoch)) . "." . sprintf("%06d", $microsecs);

【讨论】:

  • 我的 $epoch = time();我的 $microsecs = ($epoch - int($epoch)) *1e6; my $finaltime = sprintf("%s.%.0f",POSIX::strftime("%Y-%m-%d %H:%M:%S",localtime(time),$microsecs) 它打印最终时间如 2016-05-25 13:20:20.146167500000 (微秒值太长,我只想要 6 位数字)
  • 感谢您的帮助。看到回复晚了:(
【解决方案2】:

使用Time::HiRes

例子:

#!/usr/bin/env perl                                                                             

use strict;
use warnings;

use Time::HiRes qw( time );
use DateTime;

for (1..3) {
    my $dt = DateTime->from_epoch( epoch => time() );
    print $dt->strftime("%d-%m-%Y %H:%M:%S.%6N") . "\n";
    sleep 1;
}

输出:

25-05-2016 17:42:16.411722
25-05-2016 17:42:17.414295
25-05-2016 17:42:18.415920

【讨论】:

    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2011-05-21
    • 1970-01-01
    • 2019-09-06
    • 2021-11-21
    相关资源
    最近更新 更多