经过一整天的研究, 有人知道如何将.zvi文件(由axiovision,Zeiss生产)的元数据转换成实时格式的19位时间戳吗? (输出可能包括毫秒)
示例时间戳为:4675873294709522577
谢谢!
嫩
答案 0 :(得分:2)
Matlab解决方案:
主要问题不是x2mdate转换(它简单地添加了零点之间的天数,当Matlab开始计数时,以及1900年,当Excel / zvi开始计数时),但是同样的类问题如上所述。这种转换为double可以通过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');
希望这会有所帮助: - )
答案 1 :(得分:0)
这是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
this thread中的更多信息。
OLE自动化日期基本上是自19/1年1月1日以来没有任何特定时区参考的整个24小时工作日的数量。