2015-05-28 243 views
0

我已经使用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); 
+4

你能不能展示相关的代码? –

回答

3

this msdn page,书面的时间戳的返回值GetTimestampStopwatch类的方法。

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

这意味着它不一个 UNIX时间戳,但计时器滴答数:

获取定时器机制蜱的当前数量。

注意,你得到的数量取决于定时器的分辨率,作为GetTimeStamp()方法的文档的讲话中提到:

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

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

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

+1

OP没有将日期时间值添加到日志中。问题就在于此。我担心他将不得不重做演出,以获得适当的价值。 – Kryptos

+0

现在你已经写了,我在问题的文本中看到它。如果格式良好,我可能不会轻易错过。不过,我仍然认为我的回答可以帮助他理解并解决他的问题。 –

+0

问题是,当我添加DateTime和Timestamp标志时,这两个值与文档所述内容不匹配。我的时间戳值不是TimeSpan记号。为什么? – Kempeth