的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中毫秒的差異一樣排序 –