簡體   English   中英

如何以yyyyMM格式檢查有效日期

[英]How to check for valid Date in yyyyMM format

我有一個內部業務流程,我的財務部門運行。 為了開始它,他們輸入格式為yyyyMM201009的日期。 我想檢查該字符串中的有效日期,但到目前為止我什么也沒得到。

我正在探索破壞字符串,取第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.

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