[英].NET datetime Millisecond precision issue when converting from string to datetime
你好。 我試圖以字符串格式轉換到我們系統的傳入日期時間值。 似乎當毫秒的精度高於7時,.NET中的日期時間解析似乎不喜歡該值,並且無法轉換/解析該值。 我有點不知道該為此做些什么? 我目前唯一的想法是毫秒尺寸有限制,不再有精度嗎? 但我想證實這是事實,而不是假設。 例:
string candidateDateTimeString = "2017-12-08T15:14:38.123456789Z";
if (!success)
{
success = DateTime.TryParseExact(trayportDateTimeString, "yyyy-
MM-dd'T'HH:mm:ss.fffffffff'Z'",
CultureInfo.InvariantCulture, dateTimeStyles, out dateTime);
}
如果我將'f'值減少到只有7,那么日期時間解析工作正常。 有限制嗎? 或者我做了一些明顯錯誤的事情?
根據自定義日期和時間格式字符串文檔,7是第二個分數的最大支持位數。
在內部,所有DateTime值都表示為自0001年1月1日午夜12:00:00起經過的刻度數(100納秒間隔的數量)。
https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx
另見: https : //docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings
日期和時間值的精確度比您想象的更復雜。 有不同程度的精確度:
DateTime
精度
DateTime
將自01.01.0001 00:00以來的刻度數存儲為64位值。 一個刻度是100納秒。 由於這是可以存儲的最大精度,因此格式化到高於此精度的精度是沒有意義的。 您可以根據需要添加盡可能多的零來表示更高的精度。 如果需要表示比100納秒更短的時間間隔,則需要使用其他類型,例如具有自定義刻度尺寸的Int64
。
DateTime.Now
精度
當您調用DateTime.Now
,您獲得的精度遠低於DateTime
可以存儲的精度。 確切的值取決於系統時鍾,但通常在毫秒范圍內。
Stopwatch
精度
當您使用Stopwatch
測量時間時,根據您的系統,您可能會從高性能時鍾獲得時間,該時鍾比DateTime.Now
使用的時鍾更精確,但仍然小於100納秒。 在沒有高性能時鍾的系統上,精度是常規系統時鍾之一。
摘要
除非您正在解析的值來自高精度時鍾(如原子鍾),否則將其解析為DateTime
的完全精度,實際上沒有多大意義。 如果它來自這樣的源,您需要使用不同的數據類型來表示值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.