首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >午夜前后从时间戳到毫秒的转换被搞砸了

午夜前后从时间戳到毫秒的转换被搞砸了
EN

Stack Overflow用户
提问于 2014-02-25 22:30:47
回答 4查看 376关注 0票数 0

我使用以下函数以格式(例如) 02:49:02.506将时间戳转换为perl中的毫秒。

代码语言:javascript
运行
复制
sub to_millis {
    my( $hours, $minutes, $seconds, $millis) = split /:/, $_[0];

    $millis += 1000 * $seconds;
    $millis += 1000 * 60 * $minutes;
    $millis += 1000 * 60 * 60 * $hours;

    return $millis;
}

然后,我使用从上述例程生成的毫秒来计算两个时间戳之间的时间差(以毫秒为单位)。这一整天都很好,但在午夜时分,当时间戳更改到00:00:00.000时,它就会变得一团糟。因此,任何生成1小时(上午12点到凌晨1点之间)的日志都会得到时间戳差的负值。由于我的时间戳中没有日期,我该如何解决这个问题?我正试图在移动设备上这样做,它没有安装多少perl模块。因此,我无法使用所有可用的perl模块。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-25 23:53:36

我想你的时间戳永远不会超过23小时59分钟?

让我们拿两个时间戳AB。我假设A发生在B之前。

通常,如果A小于B,我知道我可以通过从B中减去A来获得我的时间。然而,在这种情况下,AB大。现在我得假设我已经在午夜时分结束了。我做什么好?

我知道AB的区别是A要到午夜,加上B。

例如,A是11:58:30,B是00:02:00

我知道A将在午夜前90秒,而B将在那个时间再增加120秒。因此,总差为90 + 120 = 210秒。

使用你的例行程序:

代码语言:javascript
运行
复制
my $midnight = to_millis( "23:59:00:000" );  # Need the time at midnight
my $a_time   = to_millis( $a_timestamp   );
my $b_time   = to_millis( $b_timestamp   );
my $time_diff;

if ( $a_time < $b_time ) {  # Normal timestamp issue
   $time_diff = $b_time - $a_time;
}
else {                      # We wrapped around midnight!
    my $first_part = $midnight - $a_time;   # Time from A to midnight
    $time_diff = $first_part + $b_time      # We add the time from midnite to B
}
票数 0
EN

Stack Overflow用户

发布于 2014-02-25 22:36:47

如果你知道你的两个时间戳的顺序,如果你知道它们之间的间隔不超过24小时,那么如果你得到一个负的差,再加上24小时(86,400,000毫秒)。

如果您没有这些信息,那么您将无法区分2分钟的跨度和24小时2分钟的跨度。

票数 1
EN

Stack Overflow用户

发布于 2014-02-25 22:36:08

您有两个时间戳,A和B。如果B在概念上总是“A”之后,但是从A到B的间隔可能跨越日期边界,那么请执行

代码语言:javascript
运行
复制
if (B < A) B+=86400000

然后做减法。或等量

代码语言:javascript
运行
复制
diff = B - A
if (diff < 0) diff+=86400000

但是,如果你不能保证B总是“在A之后”,你就必须决定差额的正值和负值的可接受范围。如果超过半天你运气不好,就没有办法解决这个问题,因为你无法判断负间隔代表的是一个真正的负间隔,还是一个正好跨越一天边界的正间隔。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22027659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档