有没有一种简单的方法可以从TimeSpan中检索开始时间戳

时间:2013-08-26 13:57:06

标签: c# .net datetime timespan

TimeSpan私有字段startTimeStampDateTime.Ticks属性之间有什么区别?有没有一种简单的方法来检索startTimeStamp(不使用反射)?

enter image description here

3 个答案:

答案 0 :(得分:5)

startTimeStamp很长,不是TimeSpan,也不一定是DateTime.Ticks

这将是StopWatch开始的时间,即基于高性能计数器的时间,如果没有高性能计数器,则为DateTime.Ticks

您可以通过调用startTimeStamp静态方法获取生成Stopwatch.GetTimeStamp()的当前值。

startTimeStamp未直接曝光,但您可以通过调用

来计算它
Stopwatch.GetTimeStamp() - stopwatch.GetRawElapsedTicks() 

答案 1 :(得分:2)

以下是用于初始化该字段的方法的来源:

    public static long GetTimestamp() {
        if(IsHighResolution) { 
            long timestamp = 0;
            SafeNativeMethods.QueryPerformanceCounter(out timestamp);
            return timestamp;
        } 
        else {
            return DateTime.UtcNow.Ticks; 
        } 
    }

    [DllImport(ExternDll.Kernel32)]
    [ResourceExposure(ResourceScope.None)]
    public static extern bool QueryPerformanceCounter(out long value); 

由于此方法为public,您也可以自己调用。

答案 2 :(得分:1)

您只能估算开始时间戳。您所要做的就是在启动StopWatch之后调用GetTimeStamp()。

System.Diagnostics.Stopwatch watch = new Stopwatch();
watch.Start();
long ts = Stopwatch.GetTimestamp();

enter image description here

  

ts => 62583777603