获取毫秒数

Get milliseconds passed

A 只需要在 C# 中以毫秒为单位稳定计算当前程序的进度。我不关心它从什么时间戳开始,无论是程序开始时、午夜还是纪元,我只需要一个函数,returns 一个稳定的毫秒值,不会以异常方式变化除了每毫秒增加 1。您会惊讶于我通过搜索找不到多少全面而简单的答案。

编辑:为什么要从我的标题中删除 C#?我认为这是一条非常重要的信息。

您可以在程序启动时以毫秒为单位存储当前时间,然后在您的函数中再次获取当前时间并减去

编辑:

如果您想要的是稳定的进程周期计数,我会使用处理器时钟而不是时间。

根据您的评论,您可以使用 DateTime.Ticks,即每刻度 1/10,000 毫秒

此外,如果您想执行时间操作,您可以使用 DateTime.Now 作为您在启动程序时存储的变量,并在需要时间时执行另一个 DateTime.Now。它有一个毫秒 属性.

无论哪种方式,DateTime 都是您想要的

当您的程序开始时,创建一个 StopWatchStart() 它。

private StopWatch sw = new StopWatch();

public void StartMethod()
{
  sw.Start();
}

您可以随时查询秒表:

public void SomeMethod()
{
  var a = sw.ElapsedMilliseconds;
}

如果你想要一些东西 accurate/precise 那么你需要使用秒表,请阅读 Eric Lippert 的博客(以前是 C# 编译器团队的首席开发人员)Precision and accuracy of DateTime

摘录:

Now, the question “how much time has elapsed from start to finish?” is a completely different question than “what time is it right now?” If the question you want to ask is about how long some operation took, and you want a high-precision, high-accuracy answer, then use the StopWatch class. It really does have nanosecond precision and accuracy that is close to its precision.

如果您不需要准确的时间,并且您不关心精度和导致毫秒数实际为 负数 的边缘情况的可能性,那么请使用日期时间。

你是说 DateTime.Now 吗?它包含绝对时间,减去两个 DateTime 实例会得到一个 TimeSpan 对象,该对象具有 TotalMilliseconds 属性.

听起来您只是想获取当前日期和时间,以毫秒为单位。如果你只是想获取当前时间,以毫秒为单位,试试这个:

long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;