我有一個內部業務流程,我的財務部門運行。要啓動它,他們輸入格式爲yyyyMM
或201009
的日期。我想檢查該字符串的有效日期,但到目前爲止我什麼都沒有。如何檢查yyyyMM格式的有效日期
我目前正在探索打破串起來,取第一4和檢查它們是1990年和2050年之間(如實施例),然後將最後的2和檢查,這是01和12。
之間是有更好的方法嗎?
我有一個內部業務流程,我的財務部門運行。要啓動它,他們輸入格式爲yyyyMM
或201009
的日期。我想檢查該字符串的有效日期,但到目前爲止我什麼都沒有。如何檢查yyyyMM格式的有效日期
我目前正在探索打破串起來,取第一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);
這接受像「000101」和「999901」日期,所以你仍然必須檢查年份是否合理值... – Guffa 2010-09-01 13:21:14
@Guffa - 好點。 OP需要更明確地指出爲他的申請制定了有效的日期。 – Oded 2010-09-01 13:26:54
感謝您的回覆,小問題。下列會給我什麼我期望的;如果'dateValue'不在將來,並且過去不超過1年,這是'TRUE'結果? 'isValid =((dateValue <= DateTime.Today)&&((dateValue.Year + DateTime.Today.AddYears(1).Year)<= DateTime.Today.Year));' – 2010-09-01 17:40:57
這裏的問題是,格式「yyyyMM」不能表示特定的DateTime
。因此,DateTime
內置的解析方法對你沒有好處。
更新:沒關係;我立場糾正。 DateTime.TryParseExact
將工作得很好(如果你問我,這很具有諷刺意味);它會解釋你的字符串來表示給定月份的第一天。
我會做你所描述的:將字符串解析爲兩個數字組件,並簡單地將這些值與你需要它們的範圍進行比較。
'TryParse'不適用於201009(yyyyMM),但是'TryParseExact'。 – 2010-09-01 12:55:59
@Anthony:對,我的不好。完全是我的意思。 – 2010-09-01 13:00:34
我會去與DateTime.ParseExact:
DateTime d = DateTime.ParseExact("201009", "yyyyMM", System.Globalization.CultureInfo.InvariantCulture);
您可以使用正則表達式:
if (Regex.IsMatch(input, @"^(199\d|20[0-5]\d)(0[1-9]|1[0-2])$")) {
// valid input between 199001 and 205912
}
加1用於正則表達式驗證。這就是我要建議的。 – xdumaine 2010-09-01 12:56:12
我會忍不住執行此爲一個數字範圍問題:
UInt32 val;
if (input.Length != 6
|| !UInt32.TryParse(input, out val)
|| val > 205012
|| val < 199001
|| val % 100 > 12
|| val % 100 == 0) {
// Invalid...
}
什麼是您申請的有效日期?是01/01/1789行嗎?是15/02/2200嗎? 16/12/2011? – Oded 2010-09-01 13:29:46
這一年將是一個商業決策,我猜想5年的範圍,沒有未來的一年。月份將是01-12的任何月份。 – 2010-09-01 14:01:57