我有一个传感器,它以通用时间输出(自1月1日午夜(世界时)以来的秒数,1904年)。
在excel中,我可以使用以下等式(UTtime / 86400)+ 1462,然后以正常日期格式格式化单元格。
当我将值读入vb net app时,您知道如何将此值转换为DateTime变量
答案 0 :(得分:0)
返回自任意日期以来的滴答数或秒数的值称为Epoch Dates。最常见的是Unix Epoch,它是自1970年1月1日UTC以来的秒数(在某些情况下为毫秒)。
要进行转换,您基本上可以完成帖子为Excel所描述的内容:将这几秒钟添加到代表基本DateTime
日期的1/1/1964 00:00:00.0 UTC
变量中。
Private Function SensorEpochToDate(value As Long) As DateTime
' remove the
Return New DateTime(1904, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).
AddSeconds(value).ToLocalTime()
End Function
您可以删除.ToLocalTime()
以将其保留为UTC。
测试:
' RDG is a random data generator
' pick a random date from 1/1/1970 to today
Dim randomDate = DateTime.SpecifyKind(RDG.GetDate(DateType.UnixEpoch), DateTimeKind.Utc)
Console.WriteLine(" Selected Date: {0} (UTC)", randomDate.ToString())
' convert/emulate a sensor date
Dim sensorDate = DateToSensorValue(randomDate)
Dim realDate = SensorEpochToDate(sensorDate)
Console.WriteLine("Round trip value: {0} (Local)", realDate.ToString())
结果:
选定日期:8/22/1994 7:23:00 PM(UTC)
往返价值:8/22/1994 5:23:00 PM(本地)
将它作为一种扩展方法以使其更易于使用可能会很好,但作为一个整数类型,它会根据我的口味显示太多变量。