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