时间戳到日期时间的转换

本文关键字:转换 时间 日期 时间戳 | 更新日期: 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选项。