簡體   English   中英

.NET datetime從字符串轉換為datetime時的毫秒精度問題

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM