的DateTime.MaxValue是:
相当于23:59:59.9999999 UTC,9999年12月31日,在 公历,只有一个100 -nanosecond前打勾00:00:00 UTC ,10000年1月1
因此,考虑大致万年,您有:
10,000 x 365 x 24 x 60 x 60 x 1000 = 315,360,000,000,000 //Note 15-digit
而double精度至少为15位。换句话说,只要您使用TotalMilliseconds
的前15位数字作为时间戳,那么它应该没问题。
我建议把它转换为long其整精度为:
–9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 //note, more than 15-digit
然后用ToString("D15")
作为唯一的时间戳:
long val = (long)DateTime.MaxValue.Subtract(DateTime.UtcNow).TotalMilliseconds;
string timestamp = val.ToString("D15");
和转换回,你可以将它转换回double
并使用AddMilliseconds
以及来自最大值的负号。
double db = Convert.ToDouble(timestamp);
DateTime dt = DateTime.MaxValue;
dt.AddMilliseconds(-db); //this will give you the datetime back with milliseconds precision
然后,你会得到精度达到你的毫秒。
来源
2016-03-01 10:21:17
Ian
我会保持简单:是否有没有使用DateTime.UctNow的原因?它将与DateTime.MaxValue中毫秒的差异一样排序 –