时间戳到日期时间的转换
本文关键字:转换 时间 日期 时间戳 | 更新日期: 2023-09-27 17:51:02
我已经使用了系统。诊断名称空间,为有我们软件问题的客户做一些性能记录。
我已经设置了一些东西,以便。net自动将当前时间戳添加到日志条目traceOutputOptions="Timestamp"
,但我无法将时间戳转换回日期时间以显示(它总是给我从0000年开始的日期)。
这似乎不是什么大问题,因为文档说它只是来自DateTime.Now
的刻度。因此,即使它们是相对的,我认为我至少可以确定两个条目之间的时间跨度。
我现在已经将DateTime标志添加到配置中,试图弄清楚如何做到这一点,似乎这些愚蠢的诊断时间戳是300纳秒而不是100纳秒。总是这样吗?因为我真的不想回到客户那里重做日志记录!
EDIT: Uhm code…不知道你想看什么。下面是新的app.config部分:
<system.diagnostics>
<trace autoflush="true" indentsize="3" />
<sources>
<source name="Application" switchValue="All">
<listeners>
<remove name="Default" />
<add name="shared" />
</listeners>
</source>
<source name="Library" switchValue="All">
<listeners>
<remove name="Default" />
<add name="shared" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="shared"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="app.log"
traceOutputOptions="Timestamp,DateTime" />
</sharedListeners>
</system.diagnostics>
,这是我试图将时间戳转换为DateTime:
long lTS = Int64.Parse(strTS);
var dt = new DateTime(lTS);
根据这个msdn页面,写入的时间戳是Stopwatch
类的GetTimestamp
方法的返回值。
Timestamp |写入时间戳,由GetTimestamp方法的返回值表示
这意味着它是而不是一个unix时间戳,而是计时器中的刻度数:
获取计时器机制中的当前滴答数。
请注意,您得到的数字取决于计时器分辨率,正如GetTimeStamp()
方法文档的注释中所提到的:
如果Stopwatch类使用高分辨率性能计数器,则GetTimestamp返回该计数器的当前值。如果Stopwatch类使用系统计时器,则GetTimestamp返回当前的DateTime。DateTime的Ticks属性。现在实例。
所以这不是DateTime
值,而是TimeSpan
值。
使用您已经拥有的DateTime值,因为您在traceOutputOptions
配置中指定了DateTime
选项。