這個問題在這里已經有了答案: DateTime.TryParse 成功決議一些數字 (5 個回答) 13 小時前關閉。
在嘗試驗證用戶輸入時,輸入字串“1,5”會生成有效日期:
var s = "1,5";
DateTime d;
var b = DateTime.TryParse(s,
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out d);
Console.WriteLine("s: " s);
Console.WriteLine("b: " b);
Console.WriteLine("d: " d);
輸出是:
s: 1,5
b: True
d: 1/5/2021 12:00:00 AM
.NET 小提琴
我的意圖是“1,5”不被視為有效的日期時間。顯然,我錯了。
我已經在 .NET Framework 4.8 和 .NET Core 5 中嘗試過,結果相同。
查看了該DateTime.TryParse方法的 .NET 源代碼后,我仍然無法弄清楚為什么這被視為有效日期。
此外,我很想以某種方式阻止將其識別為有效日期的方法。我的猜測是去,DateTime.TryParseExact但也許有更好的選擇。
我的問題
- 為什么
DateTime.TryParse在不變文化中將“1,5”視為有效日期。 - 如何防止這種行為?
uj5u.com熱心網友回復:
它將它決議為當年的“月,日”——這就是它允許的原因。
DateTime.TryParse()是出了名的寬容 - 建議通常用于DayTime.TryParseExact()避免此類事情(正如您自己建議的那樣)。
沒有比使用DateTime.TryParseExact().
這種行為實際上被記錄在案:
如果可能,此方法會嘗試忽略無法識別的資料,并使用當前日期填充缺失的月、日和年資訊。如果 s 僅包含日期而沒有時間,則此方法假定時間為午夜 12:00
所以它決議月和日數,然后將年份設定為當前日期的年份,將時間設定為午夜。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/336532.html
上一篇:不推送引數初始化物件
