将时间戳从焦耳计转换为人类可读的形式

Convert timestamp from joulemeter to human readable form

目前我正在使用微软开发的焦耳计收集数据。 它以时间戳格式记录数据和时间,但格式不同。我尝试使用 normal 进行转换,但无法获得准确的时间和数据。我将使用 php 中的数据。下面是我得到的数据,第一列是时间戳的记录。

TimeStamp (ms)   Total Power (W)     CPU (W)     Monitor (W)     Disk (W)    Base (W)    Application (W)
63573171824975  27      0.2 4.4 0   22.4    --
63573171825988  27      0.2 4.4 0   22.4    --
63573171827002  26.9    0.1 4.4 0   22.4    --
63573171828016  27      0.1 4.4 0   22.4    --
63573171829030  27      0.1 4.4 0   22.4    --
63573171830044  27      0.1 4.4 0   22.4    --
63573171831058  26.9    0   4.4 0   22.4    --
63573171832074  26.9    0   4.4 0   22.4    --
63573171833086  26.9    0.1 4.4 0   22.4    --
63573171834100  26.9    0.1 4.4 0   22.4    --
63573171835115  26.9    0   4.4 0   22.4    --

我在网上搜索过,但没有找到解决办法。 这是在这里找到的线程 Microsoft,但是没有人回答这个问题。感谢您是否可以提供帮助。

已编辑: 附加信息: 我注意到焦耳计显示了 2015 年 7 月 3 日 4:41:08 下午的功率模型 它会从这个日期而不是 windows 时间戳 1601/1970 开始计数吗? 这意味着时间戳的偏移量不同。

您需要了解时间戳。简而言之,它们是自 Unix 纪元以来经过的秒数。 (就计算机而言,时间的黎明)。

$timeStamp = 63573171824975;
echo date('jS M Y, g:i:a',$timeStamp);

输出:1940 年 5 月 26 日,7:26:pm

可以修改 'mask',在本例中为 'jS M Y, g:i:a',以适合您希望显示时间戳的格式。可以在此处找到不同的 'masks':http://php.net/manual/en/function.date.php

一旦您理解了这一点,请改用 PHP 的 DateTime 对象。 http://php.net/manual/en/book.datetime.php

经过一整天的研究,我终于想出了解决方案。 提到的时间戳格式不是 UNIX 时间戳,它从 00:00:00 1/1/1970 并且当前用作 PHP date() 函数的开始日期。 它实际上是从 0001-01-01 00:00:00 开始的。

number of second between 0001-01-01 00:00:00 and 00:00:00 1/1/1970 = 62136892800

解法:

//timestamp in millisecond
$timestamp = 63573171824975/1000 - 62136892800;
echo date('r',$timeStamp);

//result = Tue, 7 Jul 2015 03:49:35 +0800