[英]How to check for valid Date in yyyyMM format
我有一個內部業務流程,我的財務部門運行。 為了開始它,他們輸入格式為yyyyMM
或201009
的日期。 我想檢查該字符串中的有效日期,但到目前為止我什么也沒得到。
我正在探索破壞字符串,取第4個並檢查它們是在1990年到2050年之間(例如),然后是最后2個並檢查它是在01和12之間。
有沒有更好的辦法?
您可以使用DateTime.TryParseExact
來查看它是否可以正確解析:
bool isValid = false;
DateTime dateValue;
if(DateTime.TryParseExact("201009", "yyyyMM", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dateValue))
{
// DateTime parsed, dateValue contains the parsed DateTime
// Can validate dateValue against business rules at this point
isValid = (dateValue <= DateTime.Now && dateValue >= DateTime.Now.AddYears(-5));
}
如果您希望獲得異常,可以使用DateTime.ParseExact
:
// Next line throws exception if format not correct
DateTime.ParseExact("201009", "yyyyMM", CultureInfo.InvariantCulture);
您可以使用正則表達式:
if (Regex.IsMatch(input, @"^(199\d|20[0-5]\d)(0[1-9]|1[0-2])$")) {
// valid input between 199001 and 205912
}
我會使用DateTime.ParseExact:
DateTime d = DateTime.ParseExact("201009", "yyyyMM", System.Globalization.CultureInfo.InvariantCulture);
這里的問題是格式“yyyyMM”不能代表特定的DateTime
。 因此, DateTime
內置的解析方法對你沒有好處。
更新 :沒關系; 我糾正了。 DateTime.TryParseExact
可以正常工作(如果你問我,這很諷刺); 它會將您的字符串解釋為代表給定月份的第一天。
我會按照您的描述進行操作:將字符串解析為兩個數字組件,然后將這些值與您需要的范圍進行比較。
我被誘惑執行這個作為數字范圍的問題:
UInt32 val;
if (input.Length != 6
|| !UInt32.TryParse(input, out val)
|| val > 205012
|| val < 199001
|| val % 100 > 12
|| val % 100 == 0) {
// Invalid...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.