将19位时间戳转换为实时(来自.zvi文件格式)

时间:2013-10-10 15:05:46

标签: datetime metadata

经过一整天的研究, 有人知道如何将.zvi文件(由axiovision,Zeiss生产)的元数据转换成实时格式的19位时间戳吗? (输出可能包括毫秒)

示例时间戳为:4675873294709522577

谢谢!

2 个答案:

答案 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小时工作日的数量。