7 位小数计算的 UTC 时间

Posted

技术标签:

【中文标题】7 位小数计算的 UTC 时间【英文标题】:UTC time with 7 decimals calculation 【发布时间】:2020-05-21 12:09:38 【问题描述】:

我需要在 php 7.3 中计算 2 个带 7 位小数的 UTC 时间值之间的差异

我可以简单地执行以下操作吗:

val1 = 20200205120415.6513380; //first timestamp
val2 = 20200205120415.6535670; //second timestamp
$diff = $val2 - $val1; //should be difference between the 2 timestamps

上述计算的值为0.002229。如果我做得正确,该值以秒或微秒为单位,我能否将其转换为 UNIX 纪元时间戳

【问题讨论】:

【参考方案1】:

我强烈怀疑上述时间不是简单的数字;它们是 2020-02-05-12:04:15.6513380 的 BCD(二进制编码的十进制)。您无法对这些进行简单的数学运算,您需要解析它们以转换为 unix 时间戳。

根据您的语言,最简单的方法可能是将它们转换为字符串并将前四个字符作为年份,接下来的两个字符作为月份,等等。

【讨论】:

【参考方案2】:

这是我目前的完整性解决方案。

右侧的值。确实是小数秒。因此,在 PHP 中,为了获得差异,我做了以下操作:

$start = 20200205120415.6513380;
$end = 20200205120415.6535670;

//get value left of . and then create datetime object to later convert to seconds
list($datetime, $usecStart) = explode(".", $start);
$startTime = date_create_from_format("YmdHis", $datetime);
list($datetime, $usecEnd) = explode(".", $end);
$endTime = date_create_from_format("YmdHis", $datetime);

//get timestamp in seconds and add franction or microseconds back
$start = $startTime->getTimestamp().".".$usecStart;
$end = $endTime->getTimestamp().".".$usecEnd;

//get difference in seconds and fraction or microseconds
echo $end - $start;

这里是另一种使用 datetime->diff() 函数的方法:

$start = new DateTime('2020-02-05T12:04:15.6513380Z');
$end = new DateTime('2020-02-05T12:04:15.6535670Z');

$diff = $start->diff($end);
echo $diff->format('%h:%i:%s.%F');

【讨论】:

以上是关于7 位小数计算的 UTC 时间的主要内容,如果未能解决你的问题,请参考以下文章

单精度、双精度各有几位小数?

R语言:小数点位数的设置

求用python计算圆周率小数点后五万位的最快的方法,需要代码,谢谢

计算钱时一定要保留两位小数吗

物理中 如果要保留小数 保留到几位?

JS 文本框加法运算保留2位小数