0

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

示例时间戳为:4675873294709522577

谢谢 !

阿农

4

2 回答 2

2

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');

希望这可以帮助:-)

于 2014-01-22T11:35:59.470 回答
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

此线程中的更多信息。

OLE 自动化日期基本上是自 1900 年 1 月 1 日以来的整个 24 小时天数,没有任何特定的时区参考。

于 2013-10-10T17:06:16.603 回答