From Saturday, Nov 23rd 7:00 PM CST - Sunday, Nov 24th 7:45 AM CST, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

LabVIEW时间戳

内容

什么LabVIEW时间戳?

LabVIEW时间戳是一种表示绝对时间的128位数据类型。此数据类型解释可以为具有64位基数的带符号128位定点数字。

{
   (i64)自纪元01/01/1904 00:00:00.00 UTC以来的秒数(使用公历并忽略闰秒),
   (u64)一秒的正分数
}

信息何时需要用到?

如果要将时间戳传递给调用库节点或自定义库,则需知晓并重视此信息。 最高有效64位应解释为二个带符号的64位补码整数。它表示纪元01/01/1904 00:00:00.00 UTC之后的整秒数。最低有效64位应解释为不带符号的64位整数。它表示最高有效64位中所指定整秒数后的2-64秒的数量。此整数的每个时钟周期均表示0.05421010862427522170 ...阿秒。

此128位数据类型表示的绝对时间是两个64位组成部分的总和。

示例解释

日期

十进制表示法

十六进制表示法

01/01/1904 00:00:00.000 UTC

{ 0, 0 }

{ 0x0, 0x0 }

12/31/1903 23:59:59.500 UTC

{ -1, (0.5 represented by 263)) == 9223372036854775808 }

{ 0xFFFFFFFFFFFFFFFF, 0x8000000000000000 }

12/31/1903 23:59:54.800 UTC

{ -6, (0.8 * 264) == 14757395258967641293 }

{ 0xFFFFFFFFFFFFFFFA, 0xCCCCCCCCCCCCCCCD }

01/01/2002 00:00:00.000 UTC

{ 3092601600, 0 }

{ 0xB8555B00, 0x0 }

上表中的第二个示例表示纪元之前0.5秒。该示例将整数秒值设置为自纪元后下一个最小整数秒(-1),然后将小数部分设置为0.5秒,因此总和为-0.5秒。 

在第三个示例中进行了一些舍入,因为二进制无法精确地用来表示0.8。此外,如果尝试利用双精度浮点数构建其中一些值,则会由于精度不足而无法精确匹配。在这种情况下,第三个示例的小数部分将改为0xccccccccccccc000。

LabVIEW早期版本

LabVIEW 7.0或更早版本使用64位双精度浮点数(DBL)数来表示时间,从而产生15位的精度。从1904年1月1日(时间戳为纪元或零年)到2000年1月1日之间的秒数是3027456000。如果用DBL表示该值,则将使用15位精度中的10位。这样就会只从1904年走到今天,从而为使用大部分分辨率执行硬件定时留下一个非常小的分辨率空间。  因此,将时间表示为DBL并不理想,因为这样不符合行业要求。

 

额外资源

Was this information helpful?

Yes

No