LabView Xml将时间戳转换为C#DateTime

时间:2018-07-23 13:39:35

标签: c# labview

我们有一个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

1 个答案:

答案 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