时间戳到日期时间转换

Timestamp to DateTime conversion

我已经使用 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>

这是我试图将时间戳转换为日期时间的地方:

long lTS = Int64.Parse(strTS);
var dt = new DateTime(lTS);

根据this msdn page,写入的Timestamp是Stopwatch class.

GetTimestamp方法的return值

Timestamp | Write the timestamp, which is represented by the return value of the GetTimestamp method.

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

Gets the current number of ticks in the timer mechanism.

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

If the Stopwatch class uses a high-resolution performance counter, GetTimestamp returns the current value of that counter. If the Stopwatch class uses the system timer, GetTimestamp returns the current DateTime.Ticks property of the DateTime.Now instance.

所以这不是 DateTime 值,而是 TimeSpan 值。

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