经过一整天的研究,有人知道如何将 .zvi 文件(由 axiovision,蔡司生产)的元数据中的 19 位时间戳转换为实时格式吗?(输出可能包括毫秒)
示例时间戳为:4675873294709522577
谢谢 !
阿农
Matlab解决方案:
主要问题不是 x2mdate 转换(它只是在零年(Matlab 开始计数时)和 1900 年(当 Excel/zvi 开始计数时)之间添加天数),而是与上述相同的类问题。这种到双精度的转换可以通过 Matlab 中的类型转换来完成:
myZVI = 4675946358764751269;
timestampDouble = typecast(int64(myZVI),'double');
myTime = datestr(timestampDouble + 693960, 'dd-mmm-yyyy HH:MM:SS.FFF');
693960 是零年到 1900 年之间的天数;如果您不需要绝对日期而只需要两个时间戳之间的差异,那么您甚至不需要它;例如,我的两个视频帧之间的间隔可以这样计算:
myZVI2 = 4675946358764826427;
timestampDouble2 = typecast(int64(myZVI2),'double');
myTimeDifference = datestr(timestampDouble2 - timestampDouble,'SS.FFF');
希望这可以帮助:-)
这是一个 Microsoft OLE 自动化日期。但您已将其读作 64 位长整数,而不是应有的 64 位双精度数。
您没有指定语言,所以我将选择 C#:
long l = 4675873294709522577L;
byte[] b = BitConverter.GetBytes(l);
double d = BitConverter.ToDouble(b, 0);
Debug.WriteLine(d); // 41039.901598693
DateTime dt = DateTime.FromOADate(d);
Debug.WriteLine(dt); // 5/10/2012 9:38:18 PM
此线程中的更多信息。
OLE 自动化日期基本上是自 1900 年 1 月 1 日以来的整个 24 小时天数,没有任何特定的时区参考。