.net windows微秒计算精度
我正在尝试将DateTime转换为Julian日期,并在Windows7下将其反转.net windows微秒计算精度,.net,windows,datetime,.net,Windows,Datetime,我正在尝试将DateTime转换为Julian日期,并在Windows7下将其反转 public static double ToJulianDate(this DateTime dt) { return dt.ToOADate() + 2415018.5; } public static DateTime Julian2DT(this double julian) { return DateTime.FromOADate(julian -
public static double ToJulianDate(this DateTime dt) {
return dt.ToOADate() + 2415018.5;
}
public static DateTime Julian2DT(this double julian) {
return DateTime.FromOADate(julian - 2415018.5);
}
当我测试这两个函数时,如下所示
var dt = DateTime.Now;
dt.ToString("yyyy-MM-dd HH:mm:ss.ffffff").Dump();
dt.ToJulianDate().Julian2DT().ToString("yyyy-MM-dd HH:mm:ss.ffffff").Dump();
反转的朱利安日期始终与原始日期时间值相差数百微秒
我是否编写了错误的代码,或者windows时间系统中出现了微秒级的错误?这是一个自然的结果,因为儒略日期被表示为
双精度(
)。例如,当前值约为2456348.78370906。小数点前有7位有效数字,双精度仅精确到“大约”15位。所以我们在小数部分有大约8位精度的小数位数。。。代表一天
现在1天/100000000=0.000864秒。所以我只希望准确度不到一毫秒
如果你不加上儒略日期的常数,事情看起来就更美好了——在这一点上,当前值只有41330左右,因此就一天中的时间而言,在精度值内有更多的“空间”。基本上,浮点值越大,绝对精度越差。(相邻值之间的差距变大。)这是一个自然的结果,因为儒略日期被表示为一个
双精度的。例如,当前值约为2456348.78370906。小数点前有7位有效数字,双精度仅精确到“大约”15位。所以我们在小数部分有大约8位精度的小数位数。。。代表一天
现在1天/100000000=0.000864秒。所以我只希望准确度不到一毫秒
如果你不加上儒略日期的常数,事情看起来就更美好了——在这一点上,当前值只有41330左右,因此就一天中的时间而言,在精度值内有更多的“空间”。基本上,浮点值越大,绝对精度越差。(相邻值之间的差距变大。)谢谢您的回答。DateTime是一个奇怪的东西。FromOADate(dt.ToOADate())与dt.ToJulianDate().Julian2DT()完全相同,但与原始的dt.DateTime不同。FromOADate(dt.ToOADate())也存在微秒精度问题。感谢您的回答。DateTime是一个奇怪的东西。FromOADate(dt.ToOADate())与dt.ToJulianDate().Julian2DT()完全相同,但与原始的dt.DateTime不同。FromOADate(dt.ToOADate())也存在微秒精度问题。