我正在使用.NET,但我需要与基于unix的日志服务进行通信,这需要自Unix纪元时间以来的秒和微秒.秒可以轻松检索,例如:
DateTime UnixEpoch = new DateTime(1970, 1, 1);
TimeSpan time = DateTime.UtcNow() - UnixEpoch
int seconds = (int) time.TotalSeconds
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何计算微秒.我可以使用TotalMilliseconds属性并将其转换为微秒,但我认为这使得使用微秒作为精确测量的目的失败了.我已经研究过使用StopWatch类,但似乎我不能用时间播种它(例如Unix Epoch).
谢谢.
Jon*_*eet 12
使用该Ticks属性可获得最细粒度的细节.刻度为100ns,因此除以10得到微秒.
然而,这谈到了表示精度 - 它根本没有谈论准确性.鉴于粗粒度,DateTime.UtcNow我不希望它特别有用.有关更多信息,请参阅Eric Lippert 关于精度和准确度之间差异的博客文章.
您可能想要在已知时间启动秒表,并基本上将其时间添加到"起始点".请注意,"ticks" Stopwatch并不代表相同TimeSpan.Ticks.
epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
Run Code Online (Sandbox Code Playgroud)
由于整数除法,这将截断它,因此使其10000000.0保持亚秒级部分,或者只是不进行除法。
重要的是要注意,.Ticks您获得的属性是相对于0001年1月1日的,而不是 1970年1 月1日的,相对于UNIX,这就是为什么您需要在上面减去该偏移量。
编辑:为清楚起见,该讨厌的常数只是UTC中0001年1月1日至1970年1月1日之间的滴答数。如果将秒数部分(62135596800)除以(365 * 24 * 60 * 60),则会看到一个接近的数字1970,由于跳变调整,该数字当然不完全是1970。
| 归档时间: |
|
| 查看次数: |
1921 次 |
| 最近记录: |