簡體   English   中英

在C#中驗證日期字符串的最佳方法

[英]Best way to validate a date string in C#

我試圖使用DateTime.TryParse()方法驗證從app.config文件讀取的日期。 但是,當輸入為"12/05/201"時,它返回true。 這實際上是一個錯字,應該是"12/05/2018" 當我單步執行代碼時,它自動將日期轉換為"12/05/0201"並返回true。 但是,當我使用DateTime.TryParseExact() ,對於上述輸入,它正確地返回了false。 因此,我們應該始終使用DateTime.TryParseExact()嗎? 我有點困惑,因為早在需要驗證日期字符串時,我就使用DateTime.TryParse() 這兩個代碼如下:

Boolean isValidStartDate = DateTime.TryParse(startDate, out DateTime startDateVerified);

CultureInfo enUS = new CultureInfo("en-US");

Boolean isValidStartDate = DateTime.TryParseExact(startDate,"MM/dd/yyyy",enUS, DateTimeStyles.None, out DateTime startDateVerified);

謝謝

驗證日期的最佳方法取決於用例和輸入數據源及其格式

DateTime.TryParse是使用當前DateTimeFormatInfo對象中的格式信息進行解析的,因此,假設您使用TryParse“ 12/05/201”,它將根據您當前的區域性設置返回解析的數據。 這是“ 12/05/0201”,即日期格式為“ MM / DD / YYYY”

在解析日期時指定日期格式和區域性差異始終是一個好習慣,並使用TryParseExact代替TryParse

(注意:要了解當前的區域性設置,您可以查找CultureInfo.DefaultThreadCurrentCulture和CultureInfo.DefaultThreadCurrentUICulture類的成員)

無效的201年是業務邏輯-如果您想要對導入的數據進行邏輯保護(並且應該這樣做),請明確地執行它們。 使用C#,您可以根據需要輕松地向DateTime添加擴展方法,例如

public static DateTime ParseDateWithSanity(this DateTime, string date)
{
    dt = DateTime.Parse(date);

    if dt.Year < 1900
    {

      throw BadInputException()
    }
}

暫無
暫無

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

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