谜:DateTime精度需要舍入时

ttaao​​ossuu

我一直在高精度地使用时间来记录我的程序在控制台中的事件。但是很快我注意到程序有时显示的时间四舍五入到毫秒,有时却不显示!它是完全零星发生的,是相同的代码,不建议在运行之间进行编辑,而不是在运行之间进行编辑:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace DateTimePrecisionTest
{
    class Program
    {
        static DateTime ProgramStartTimeGlobal;

        static void PrintConsoleLogGlobal()
        {
            string TimeStampText = ((DateTime.Now - ProgramStartTimeGlobal).TotalMilliseconds / 1000).ToString("0.000000");
            Console.WriteLine(String.Format("Global var: [ {0,10} ] ", TimeStampText));
        }

        static void PrintConsoleLogLocal(DateTime StartTime)
        {
            string TimeStampText = ((DateTime.Now - StartTime).TotalMilliseconds / 1000).ToString("0.000000");
            Console.WriteLine(String.Format("Local var: [ {0,10} ] ", TimeStampText));
        }

        static void Main(string[] args)
        {
            ProgramStartTimeGlobal = DateTime.Now;
            for (int i = 0; i < 20; i++)
            {
                PrintConsoleLogGlobal();
                PrintConsoleLogLocal(ProgramStartTimeGlobal);
                Thread.Sleep(512);
            }
            Console.ReadLine();
        }
    }
}

首先,我认为这取决于我要打印全局变量还是局部变量。但这似乎并非如此。输出为(值括号以秒为单位):

在此处输入图片说明 在此处输入图片说明

这种混乱的精度变化会在使用此日志记录的其他程序中发生。例如,该程序在远程服务器上执行任务(它们之间的延迟无法预料):

在此处输入图片说明 在此处输入图片说明

为什么??

Damien_The_Unbeliever

在内部,DateTime.Now(通过UtcNow)取决于Windows API GetSystemTimeAsFileTime不幸的是,此时钟的分辨率可能会根据系统上其他程序的活动而变化(请参阅该页面底部的社区评论)

timeBeginPeriod函数记录为:

此功能会影响Windows的全局设置。Windows使用任何进程请求的最低值(即最高分辨率)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在javascript中舍入时差

来自分类Dev

C ++舍入随机双精度

来自分类Dev

增强多精度舍入模式

来自分类Dev

正确舍入的双精度除法

来自分类Dev

增强多精度舍入模式

来自分类Dev

如何舍入datetime()?

来自分类Dev

在SQL中舍入DateTime

来自分类Dev

使用Joda向上或向下舍入时间

来自分类Dev

如何在Postgresql中舍入时间?

来自分类Dev

Python:舍入时间模块的输出

来自分类Dev

Stata 中的问题舍入时间

来自分类Dev

Magento代码需要精度

来自分类Dev

舍入时间间隔最多为15分钟

来自分类Dev

四舍五入并舍入时间

来自分类Dev

使用NS与Truncate使Python舍入时间戳

来自分类Dev

需要java加倍才能不舍入

来自分类Dev

XSLT2.0中的精度,舍入和数据类型

来自分类Dev

不使用浮点,双精度或除法舍入整数

来自分类Dev

错误:函数舍入(双精度,整数)不存在

来自分类Dev

C ++写入文件中双精度类型的意外舍入

来自分类Dev

将数字舍入到Objective-C中的指定精度

来自分类Dev

python datetime以毫秒精度浮动

来自分类Dev

用向上(或向下)舍入将长双精度转换为双精度

来自分类Dev

PHP 在四舍五入时精度不正确

来自分类Dev

舍入时间跨度到15分钟间隔

来自分类Dev

舍入时间跨度到15分钟间隔

来自分类Dev

防止在Google图形X轴中舍入datetime列

来自分类Dev

通过Double往返DateTime而不损失精度

来自分类Dev

在 Elixir 中处理 DateTime 精度 > 6