我被困在 C# 中将 DateTime 对象转换为 libpcap 捕获文件格式的时间戳(wireshark 也使用文件格式 definitiom)。我无法将对象转换为的时间戳是数据包(记录)标头(guint32 ts_sec 和 guint32 ts_usec)中的时间戳。
问问题
1193 次
2 回答
6
你可以这样做:
DateTime dateToConvert = DateTime.Now;
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan diff = date - origin;
// Seconds since 1970
uint ts_sec = Math.Floor(diff.TotalSeconds);
// Microsecond offset
uint ts_usec = 1000000 * (diff.TotalSeconds - ts_sec);
于 2009-09-18T17:33:25.677 回答
0
最好在进行任何操作之前将 Unix 纪元和您的 dateToConvert 转换为 UTC。DateTime 有一个构造函数,它采用 DateTimeKind 来构造 UnixEpoch,并且 dateToConvert 有一个 ToUniversalTime() 方法。如果您总是想要现在,有一个方便的 DateTime.UtcNow 属性可以为您处理。编写的代码应该没有任何问题,但是如果您将其设为函数,则可以传递 UTC 日期并使用 UTC 目标日期,并且本地 Unix 纪元肯定不会给出正确的结果,除非您在 GMT 和不在夏令时。
于 2009-09-28T14:43:05.743 回答