Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#以微秒为单位的时间_C# - Fatal编程技术网

C#以微秒为单位的时间

C#以微秒为单位的时间,c#,C#,我正在搜索如何格式化时间,包括微秒。 我使用的是类DateTime,它允许(使用属性)在毫秒之前获取数据,这不是很长。 我尝试使用记号,但不知道如何将其转换为微秒。您可以在格式字符串中使用“ffffff”来表示微秒: Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.ffffff")); 要将刻度数转换为微秒,只需使用: long microseconds = ticks / (TimeSpan.TicksPerMillisecond / 10

我正在搜索如何格式化时间,包括微秒。 我使用的是类DateTime,它允许(使用属性)在毫秒之前获取数据,这不是很长。 我尝试使用记号,但不知道如何将其转换为微秒。

您可以在格式字符串中使用
“ffffff”
来表示微秒:

Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.ffffff"));
要将刻度数转换为微秒,只需使用:

long microseconds = ticks / (TimeSpan.TicksPerMillisecond / 1000);
const long TicksPerMicrosecond = 10;

...

long microseconds = ticks / TicksPerMicrosecond;
如果这些对你没有帮助,请提供更多关于你正试图做什么的信息

编辑:我最初将
滴答声
乘以1000,以避免在将
时间跨度.滴答声毫秒
除以1000时失去准确性。然而,事实证明,
毫秒
实际上是一个10000的常量值-因此你可以毫无问题地除以1000,事实上我们可以使用:

long microseconds = ticks / (TimeSpan.TicksPerMillisecond / 1000);
const long TicksPerMicrosecond = 10;

...

long microseconds = ticks / TicksPerMicrosecond;
“ffffff”是你需要的

return DateTime.Now.ToString("HH:mm:ss.ffffff");

我无法让约翰第二次转换工作。下面是我如何使用滴答声和秒表测量微秒和纳秒分辨率的:

Stopwatch sw = new Stopwatch();
sw.Start();

// Do something you want to time

sw.Stop();

long microseconds = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L*1000L));
long nanoseconds = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L*1000L*1000L));

Console.WriteLine("Operation completed in: " + microseconds + " (us)");
Console.WriteLine("Operation completed in: " + nanoseconds + " (ns)");
它是:

对于格式为小时:分钟:秒:微秒的整个时间戳

return DateTime.Now.ToString(".ffffff");

如果只需要剩余微秒。

我使用了这两种选项,问题是微秒总是为零。似乎它无法解决这个问题。那么这不是格式问题,而是解决问题。从哪里开始获取数据?如果你想计算某物需要多长时间,你应该使用秒表。我只是需要它来记录日志。对于系统中的每个事件,我都在事件发生的开始时间输入。有什么建议吗?您可以尝试使用P/Invoke获取准确的系统时间,但我不知道您会发现它有多准确。。。这可能有点痛苦。@EdgarsŠturms:Stopwatch是测量经过时间的正确答案,但它不适合获取“一天中的时间”。我使用它的问题是它总是在微秒时打印零,就像它不计算它一样。这不是格式的问题,这是日期时间的问题。现在是准确性。尝试使用System.Diagnostics.Stopwatch。我在另一个windows(我的是vista)中尝试了它,它的分辨率为毫秒。请小心使用DateTime。现在,它不精确到微秒。请尝试System.Diagnostics.Stopwatch以获取时间。还要确保你有一个高分辨率的系统时钟。是的,你是对的。我花了很长时间才理解这一评论。虽然它以微秒为单位表示时间,但时间不是以微秒为单位。sw.appeased.totalmillizes很好。然后除以1000得到微秒。这不太正确,因为(Stopwatch.Frequency/(1000L*1000L))是一个长值,所有内容都保留在小数点后。例如,如果(我的评论)上一行中的等式的结果是2.8576,从技术上讲是3,但sw.ElapsedTicks将被2除,而不是2.8或3,这是完全错误的。