【发布时间】:2015-01-20 19:09:01
【问题描述】:
如何在时间戳中使用正则表达式删除/剪切点 (.) 之后的所有内容?我想使用输出在下面的代码中查找时差
$_ = '2015/01/13 13:59:21.267-05:00';
s/\.\d*//;
print $_, "\n";
电流输出:
2015/01/13 13:59:21-05:00
期望的输出:
2015/01/13 13:59:21
求时差代码:
use strict;
use warnings;
use Time::Piece;
my $str1 = '2015/01/13 13:58:01.267-05:00';
my $str2 = '2015/01/13 13:59:21.267-05:00';
my @times = map Time::Piece->strptime((s/\.\d*//), '%Y/%m/%d %H:%M:%S'), $str1, $str2;
my $delta = $times[1] - $times[0];
print $delta->pretty;
【问题讨论】:
-
你试过
\..*吗?这似乎是一个微不足道的问题。 -
我认为
.267最有可能代表几分之一秒而不是微秒,所以在13:58:01.267的情况下,您可能有 1.267 秒或 1 秒和 267 毫秒,而不是 1 秒和267 微秒。 -
另外,您应该真的不要丢弃时区信息 (
-05:00)。如果没有时区,由于夏令时,您的某些时间戳的答案将不准确。请参阅ikegami's answer 到您询问的上一个问题,了解如何正确执行此操作的一个很好的示例。