我想将微秒和纳秒添加到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
中的任何差异。
这是正确的方法吗?
答案 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.1
和scale = 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"));
}