以毫秒精度获取DateTime.Now

Luc*_*yHK 216 c# precision datetime milliseconds

如何以毫秒精度精确构造实际时间的时间戳?

我需要像16.4.2013 9:48:00:123这样的东西.这可能吗?我有一个应用程序,我每秒采样值10次,我需要在图表中显示它们.

Jon*_*eet 287

如何以毫秒精度精确构造实际时间的时间戳?

我怀疑你的意思是毫秒精度.DateTime具有很高的精度,但在精度方面相当粗糙.一般来说,你不能.通常系统时钟(从中DateTime.Now获取数据)的分辨率大约为10-15毫秒.有关更多详细信息,请参阅Eric Lippert 关于精度和准确性博客文章.

如果您需要比此更精确的计时,您可能需要考虑使用NTP客户端.

但是,目前还不清楚你真的需要毫秒精度.如果您不关心确切的时间 - 您只是想以正确的顺序显示样本,并且具有"非常好"的准确度,那么系统时钟应该没问题.我建议你使用DateTime.UtcNow而不是DateTime.Now避免夏令时转换等时区问题.

如果您的问题实际上只是将转换DateTime为精确到毫秒级的字符串,我建议使用:

string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff",
                                            CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

(请注意,与您的示例不同,这是可排序的,并且不太可能导致混淆,无论是"月/日/年"还是"日/月/年".)

  • @antonio:没有比"不工作"更多的信息,我无法提供任何帮助. (5认同)

Pyr*_*cer 110

这应该工作:

DateTime.Now.ToString("hh.mm.ss.ffffff");
Run Code Online (Sandbox Code Playgroud)

如果您不需要显示它并且只需要知道时差,那么就不要将它转换为String.保持原样,DateTime.Now();

TimeSpan用来了解时间间隔之间的差异:

DateTime start;
TimeSpan time;

start = DateTime.Now;

//Do something here

time = DateTime.Now - start;
label1.Text = String.Format("{0}.{1}", time.Seconds, time.Milliseconds.ToString().PadLeft(3, '0'));
Run Code Online (Sandbox Code Playgroud)


Joz*_*car 25

我正在寻找一个类似的解决方案,基于此线程上的建议,我使用以下 DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff") ,它的工作就像魅力.注意:这.fff是您要捕获的精确数字.


Jac*_*man 20

使用DateTime Structure以毫秒和格式如下:

string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff", 
CultureInfo.InvariantCulture);
timestamp = timestamp.Replace("-", ".");
Run Code Online (Sandbox Code Playgroud)


小智 16

Pyromancer的答案对我来说似乎很好,但也许你想要:

DateTime.Now.Millisecond
Run Code Online (Sandbox Code Playgroud)

但如果您要比较日期,TimeSpan就是您的选择.

  • 注意:如果您将两个DateTimes之间的差异作为TimeSpan进行比较,则需要"TotalMilliseconds".毫秒保持当前的毫秒计数器,该计数器永远不会大于1000,而TotalMilliseconds保存自纪元以来经过的总毫秒数. (15认同)

小智 6

如果您仍然需要日期而不是像其他答案一样的字符串,只需添加此扩展方法即可。

public static DateTime ToMillisecondPrecision(this DateTime d) {
    return new DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute,
                        d.Second, d.Millisecond, d.Kind);
}
Run Code Online (Sandbox Code Playgroud)