时间戳到DateTime转换

时间:2015-05-28 11:13:00

标签: c# .net system.diagnostics

我已使用System.Diagnostics命名空间与我们软件有问题的客户进行一些性能记录。

我已经设置好了以便.NET自动将当前时间戳添加到日志条目traceOutputOptions="Timestamp"但是无法将时间戳转换回日期时间以便显示(它总是给我一年的日期0000)。

这个问题似乎不是什么大问题,因为文档说它来自DateTime.Now。因此,即使他们相对,我认为我至少可以确定两个条目之间的时间跨度。

我现在已将DateTime标志添加到配置中,试图弄清楚如何操作,看起来这些愚蠢的诊断时间戳是300纳秒而不是100纳秒。总是这样吗?因为我真的不想回到客户那里重做日志记录!

编辑:代码呃...不确定你想看到什么。这是新的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);

1 个答案:

答案 0 :(得分:3)

根据this msdn page,写入的时间戳是GetTimestamp类的Stopwatch方法的返回值。

  

时间戳|写下时间戳,由GetTimestamp方法的返回值表示。

这意味着它的是一个unix时间戳,而是计时器中的滴答数:

  

获取计时器机制中的当前滴答数。

请注意,您获得的数字取决于计时器分辨率,如GetTimeStamp()方法文档的备注中所述:

  

如果Stopwatch类使用高分辨率性能计数器,GetTimestamp将返回该计数器的当前值。如果Stopwatch类使用系统计时器,GetTimestamp将返回DateTime.Now实例的当前DateTime.Ticks属性。

因此,这不是DateTime值,而是TimeSpan值。

使用您已有的DateTime值,因为您在DateTime配置中指定了traceOutputOptions选项。