如何将微秒和纳秒添加到DatetTime?

时间:2017-01-29 10:29:17

标签: c# datetime

我想将微秒和纳秒添加到DateTime

DateTime dateTime = DateTime.Now;

for(int i = 0; i < 100000; i++)
{
    dateTime  = dateTime.AddMilliseconds(0.1);
    Console.WriteLine(dateTime.ToString("yyyy.MM.dd,HH:mm:ss.ffffff"));          
}

我无法看到dateTime中的任何差异。 这是正确的方法吗?

1 个答案:

答案 0 :(得分:2)

来自DateTime.AddMilliseconds documentation;

  

参数

     

value

     

输入:System.Double

     

一些整数和小数毫秒。值参数可以是负数或正数。 请注意,此值四舍五入为   最接近的整数。

你也可以看到它是reference source

public DateTime AddMilliseconds(double value)
{
    return Add(value, 1);
}

并将其称为Add method reference;

private DateTime Add(double value, int scale)
{
    long millis = (long)(value * scale + (value >= 0? 0.5: -0.5));
    ...
    ...
}

对于value = 0.1scale = 1,它将是

long millis = (long)(0.6);

(long)(0.6)会返回0,因为Explicit Numeric Conversions Table说;

  

当你从double或float值转换为整数类型时,   值被截断

因此,实际上,您向该DateTime实例添加任何内容,并且您获得了所有迭代的相同结果。当你处理DateTime的AddXXX方法时,我会使用整数来防止混淆。

由于1毫秒是10000抽动,你所做的是数学等于;

DateTime dateTime = DateTime.Now;

for(int i = 0; i < 100000; i++)
{
    dateTime  = dateTime.AddTicks(1000);
    Console.WriteLine(dateTime.ToString("yyyy.MM.dd,HH:mm:ss.ffffff"));          
}