簡體   English   中英

DateTime.TryParse 將十進制轉換為日期時間

[英]DateTime.TryParse converts decimal to datetime

以下代碼行返回 true(它不應該)......並將 1.0228 轉換為日期時間......

DateTime.TryParse(1.0228,out temporaryDateTimeValue)

有人請幫助我。

以下代碼行返回 true(它不應該)......並將 1.0228 轉換為日期時間......

DateTime.TryParse(1.0228,out temporaryDateTimeValue)

這不會編譯。

但是,如果你用引號括起來(並稍微清理一下),

bool success = DateTime.TryParse("1.0228", out temporaryDateTimeValue);

那么,是的,你會得到true回報。 您需要閱讀文檔以了解原因,但基本上,有許多不同的格式化日期的方法,您偶然發現了一種(可能M.yyyy ?)。

如果您不希望它解析,我可以建議

bool success = DateTime.TryParseExact(
                   "1.0228",
                   "yyyyMMdd", 
                   CultureInfo.InvariantCulture,
                   DateTimeStyles.None,
                   out temporaryDateTimeValue
               );

那么successfalse的。

我從文檔中的注釋中注意到:

字符串s使用當前DateTimeFormatInfo object 中的格式信息進行解析,該信息由當前線程區域性隱式提供。

如果可能,此方法會嘗試忽略無法識別的數據,並使用當前日期填充缺失的月、日和年信息。 如果 s 僅包含日期而沒有時間,則此方法假定時間為午夜 12:00。 s 中的任何前導、內部或尾隨空白字符都將被忽略。 日期和時間可以用一對前導和尾隨數字符號字符('#',U+0023)括起來,並且可以用一個或多個 NULL 字符(U+0000)結尾。

由於DateTime.TryParse(String, DateTime)方法嘗試使用當前區域性的格式規則解析日期和時間的string表示,因此嘗試跨不同區域性解析特定string可能會失敗或返回不同的結果。 如果將跨不同的語言環境解析特定的日期和時間格式,請使用DateTime.TryParse(String, IFormatProvider, DateTimeStyles, DateTime)方法或TryParseExact方法的重載之一並提供格式說明符。

基本上, TryParse “嘗試”解析你給它的字符串(盡管“ Try ”實際上是指該方法返回一個布爾值以指示成功/失敗指示的事實)。

不,該代碼不會返回 true - 它甚至不會編譯:

using System;

class Program
{

    static void Main(string[] args)
    {
        DateTime dt;
        Console.WriteLine(DateTime.TryParse(1.0228, out dt));
    }
}

錯誤:

Test.cs(9,27): error CS1502: The best overloaded method match for
        'System.DateTime.TryParse(string, out System.DateTime)' has some invalid
        arguments
Test.cs(9,45): error CS1503: Argument 1: cannot convert from 'double' to
        'string'

如果將其更改為“1.0228”,它返回 true,是的。 看起來它使用的是“M.yyyy”格式,這無疑對某些文化有效......並強調了為什么在我看來使用DateTime.TryParse是個壞主意。 如果您有特定的格式(或格式集),您應該使用DateTime.TryParseExact代替,以便您可以指定格式。

我通常發現指定確切的格式是個好主意,而且我通常還會指定CultureInfo.InvariantCulture ,除非日期直接來自用戶(根據我的經驗,這種情況很少見)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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