我们有一个LabView应用程序,该应用程序生成一个包含TimeStamp的XML文件。 LabView有Flatten To XML Function
XML看起来像这样
<Timestamp>
<Name>Time Stamp Control</Name>
<Cluster>
<Name/>
<NumElts>4</NumElts>
<I32>
<Name/>
<Val>0</Val>
</I32>
<I32>
<Name/>
<Val>-309993472</Val>
</I32>
<I32>
<Name/>
<Val>-679771851</Val>
</I32>
<I32>
<Name/>
<Val>0</Val>
</I32>
</Cluster>
</Timestamp>
我有一个C#服务,可读取仪表板网站的所有这些XML和流程。在解释这些<val>
并生成C#DateTime
约会时间: 2018/7/23上午8:57:25.927
与此主题相关的一些讨论是here
答案 0 :(得分:0)
如documentation中所述:
LabVIEW时间戳是代表绝对时间的128位数据类型。
那些128位包括两个64位整数:
自纪元01/01/1904 00:00:00.00 UTC以来的(i64)秒(使用公历并忽略leap秒)
和
(u64)秒的正分数
扁平化的XML表示将每个分割成两个32位带符号整数,从而得到四个值。 在您的示例中,值是(从底部到顶部-注意“交换顺序”):
0 : High 32 bits of the whole seconds part
-679771851 : Low 32 bits of the whole seconds part
-309993472 : High 32 bits of the fraction of a second part
0 : Low 32 bits of the fraction of a second part
“第二部分的分数”是一个分数-如果它等于64位数字的最大值,则等于1秒。因此,显然,您需要将其除以该值(最多64位)。
因此,在合并了各个部分之后,您可以将得到的“秒部分”添加到“第二部分的分数”中,并且您具有自世界协调时间01/01/1904 00:00:00.00以来的秒数。
以下labview代码演示了所描述的重构。 Flattened Time Stamp reconstruction example