使用C#获取时间(以毫秒为单位)

Ent*_*ity 114 c# datetime time-precision milliseconds

我正在制作一个程序,我需要在几毫秒内获得时间.到时候,我的意思是一个永远不会与自己相等的数字,并且总是比一秒钟前更大的1000个数字.我已经尝试过转换DateTime.Now为a TimeSpanTotalMilliseconds从中得到...但我听说它并不完全准确.

有更简单的方法吗?

Eva*_*ski 283

long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
Run Code Online (Sandbox Code Playgroud)

这实际上是如何在类中实现各种Unix转换方法DateTimeOffset(.NET Framework 4.6 +,.NET Standard 1.3+):

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
Run Code Online (Sandbox Code Playgroud)

  • 标题是"以毫秒为单位获取时间".这个答案很有帮助. (59认同)
  • 是的,对于我们这些寻找问题答案的人来说,这非常有帮助,谢谢. (31认同)

Red*_*ter 77

使用该Stopwatch课程.

提供一组方法和属性,可用于准确测量经过的时间.

这里有一些很好的信息来实现它:

性能测试:使用System.Diagnostics.Stopwatch进行精确的运行时测量

  • 虽然有多贵?也许我们应该秒表秒表:) (10认同)
  • 秒表是诊断的一部分.它应该用于实际代码吗? (7认同)
  • @Andrey - http://stackoverflow.com/questions/2805362/can-stopwatch-be-used-in-production-code/2805409#2805409 (5认同)
  • @Steven,这取决于操作系统和底层硬件.如果可用,则使用高分辨率计时器,这是我所知道的所有当前基于桌面和服务器的x86 Windows版本的情况.检查Frequency和IsHighResolution属性以获取更多详细信息.在操作系统级别,QueryPerformanceCounter和QueryPerformanceFrequency是支持此功能的低级API. (3认同)

Ita*_*aro 13

DateTime.Ticks属性获取表示日期和时间的刻度数.

10,000蜱是一毫秒(每秒10,000,000蜱).

  • @codymanix是对的.通过类比,Angstrom是一个长度单位; 100亿埃一米.您可以编写一个函数,将您的高度报告为64位整数(以埃为单位),但如果您只有精确到厘米的metrestick,则函数表示亚纳米级精度的事实完全无关紧要.不太重要的数字将是垃圾. (6认同)
  • 当然可以,但操作系统没有这么精确的分辨率. (5认同)
  • 但是Ticks的分辨率非常低于1/10000秒,也许是1/62秒 (4认同)
  • @RedFilter:如果你真的知道你的年龄到最近的毫秒,你可以想象说,"当我再次眨眼时,我的年龄将是x毫秒." 更深层次的问题不是沟通而是衡量:即使到最近的第二个,你的出生也不太可能被人知道. (4认同)
  • @codymanix - 来自MSDN:`单个刻度表示一百纳秒或一千万分之一秒.一毫秒内有10,000个刻度 (2认同)

sch*_*jos 9

我使用以下课程.我在互联网上发现了一次,假设是最好的NOW().

/// <summary>Class to get current timestamp with enough precision</summary>
static class CurrentMillis
{
    private static readonly DateTime Jan1St1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    /// <summary>Get extra long current timestamp</summary>
    public static long Millis { get { return (long)((DateTime.UtcNow - Jan1St1970).TotalMilliseconds); } }
}
Run Code Online (Sandbox Code Playgroud)

来源不明.

  • FWIW,这个常用代码片段的全部内容,是制作一个与Unix时间戳标准兼容的时间戳.为此,这是至关重要的.如果只是想做定时,那就不必要了. (5认同)

Pie*_*kel 8

您可以尝试本QueryPerformanceCounter机方法.有关更多信息,请参见http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html.这是Stopwatch班级使用的.

请参见如何在.NET/C#中获取tick精度的时间戳?欲获得更多信息.

Stopwatch.GetTimestamp() 可以访问此方法:

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


Sar*_*van 5

我使用了DateTime.Now.TimeOfDay.TotalMilliseconds(当前日期),希望对您有所帮助。

  • 吉姆·奥尼尔(Jim O'Neil)我同意你的意见,这就是为什么我在帖子中提到“(当天)”…顺便说一句,我的解决方案适用于我的问题,因为我的问题不是特定于日期的,我只需要获取毫秒部分用作计数器,所以我在此处发布了它。我是新来的,所以如果我在错误的地方张贴它,很抱歉:) (3认同)