我正在寻找一些Perl的帮助,了解如何正确地完成这项工作。我不介意使用一个库来做这件事。
我从mySQL数据库中提取了一个协调世界时的时间戳,格式为: 2012-02-06 13:50:09
我需要Perl获取当前的UTC时间,并以分钟(或秒)为单位获取两个时间戳之间的差值。我在Unix子进程中执行此操作,但我很难获得UTC时间并进行比较,因为本地计算机是在东部时间运行的。我不介意在Unix时间这样做,但不确定如何准确地获得UTC时间,以便与mysql中的"last_timestamp“进行比较,”UTC“是mysql中基于UTC的时间戳。
my $date_diff = qx(date -d "\$(date +'%F %T')" +%s) -
qx(date -d "$last_timestamp" +%s); 我们将一如既往地感谢和重视您的帮助。
发布于 2012-02-07 03:25:49
time内置函数返回自纪元以来的秒数(没有时区)。然后可以使用Perl的gmtime内置函数将其转换为UTC M-D-H-M-S值。调用不带任何参数的gmtime实际上与解析MySQL日期/时间值的gmtime(time).发布于 2012-02-07 03:17:01
一种方法是使用核心Time::Piece
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $when = q(2012-02-06 13:50:09);
my $t = Time::Piece->strptime( $when, "%Y-%m-%d %H:%M:%S" );
print "delta seconds = ", time() - $t->strftime("%s"),"\n";发布于 2012-02-07 03:25:20
这是一个使用DateTime的解决方案
use strict;
use warnings;
use DateTime;
my $date_str="2012-02-06 13:50:09";
my ($year,$month,$day,$hour,$min,$sec);
if($date_str=~/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/)
{
$year=$1;
$month=$2;
$day=$3;
$hour=$4;
$min=$5;
$sec=$6;
}
else
{
die "Couldn't parse timestamp $date_str\n";
}
my $dt=DateTime->new(
year=>$year,
month=>$month,
day=>$day,
hour=>$hour,
minute=>$min,
second=>$sec,
time_zone=>"UTC"
);
my $now=DateTime->now;
$now->set_time_zone("UTC");
my $difference=$now->delta_ms($dt);
print "The difference is " . (60*($difference->minutes) + ($difference->seconds)) . " seconds\n";输出为:
The difference is 2078 seconds这听起来很对。
https://stackoverflow.com/questions/9165572
复制相似问题