C#DateTime.trparse date year值交换。2002年2月30日

C#DateTime.trparse date year值交换。2002年2月30日,datetime,swap,Datetime,Swap,我遇到了与日期时间相关的问题,我的程序需要确定用户输入的日期字符串是否有效 该程序设计用于处理2000年1月1日至2020年12月31日之间的日期值,字符串格式如“12 Feb 10” 我面临的问题是,有时用户输入“30 Feb 10”(该值无效)之类的值,该值通过了格式检查,但DateTime.TryParse会将该字符串解释为“10/02/1930 12:00:00am” 我解决这个问题的方法是分别从字符串中提取日期、月份和年份值,然后尝试重新构造日期字符串。请参阅下面的代码 private

我遇到了与日期时间相关的问题,我的程序需要确定用户输入的日期字符串是否有效

该程序设计用于处理2000年1月1日至2020年12月31日之间的日期值,字符串格式如“12 Feb 10”

我面临的问题是,有时用户输入“30 Feb 10”(该值无效)之类的值,该值通过了格式检查,但DateTime.TryParse会将该字符串解释为“10/02/1930 12:00:00am”

我解决这个问题的方法是分别从字符串中提取日期、月份和年份值,然后尝试重新构造日期字符串。请参阅下面的代码

private static void IsValidDateValue(string userInputValue, CustomValidatorExtended custValidator, string errorMessage, ref bool isValid)
    {
        Regex regexValue = new Regex(SHORT_DATE_VALUE);
        if (regexValue.IsMatch(userInputValue))
        {
            Match match = regexValue.Match(userInputValue);
            int dayValue;
            if (!Int32.TryParse(match.Groups["date"].Value, out dayValue))
            {
                custValidator.ErrorMessage = errorMessage;
                isValid = false;
                return;
            }
            int monthValue;
            if (!Int32.TryParse(ConvertMonthNameToNumber(match.Groups["month"].Value).ToString(), out monthValue))
            {
                custValidator.ErrorMessage = errorMessage;
                isValid = false;
                return;
            }
            //this application is designed to handle only from year 2000 ~ 2020 and user only suppose to enter 2 digits for year 
            int yearValue;
            if (!Int32.TryParse("20" + match.Groups["year"].Value, out yearValue))
            {
                custValidator.ErrorMessage = errorMessage;
                isValid = false;
                return;
            }
            DateTime dtParse;
            if (!DateTime.TryParse(yearValue + "-" + monthValue + "-" + dayValue, out dtParse))
            {
                custValidator.ErrorMessage = errorMessage;
                isValid = false;
                return;
            }
        }
        else
        {
            isValid = true;
            return;
        }
    }
是否有一种更简单的方法使用.net framework默认方法来解决此日期-年份值交换问题

谢谢和问候,

这是您想要的:

DateTime parse = DateTime.ParseExact(parseString, "dd MMM yy", CultureInfo.CurrentCulture);
或者检查它是否有效:

DateTime parse;
DateTime.TryParseExact(parseString, "dd MMM yy" CultureInfo.CurrentCulture, out parse);

valid
设置为false,并保持dt不变。当
val
设置为
“2009年3月31日”
时,它将valid设置为true,dt包含未指定时区的2009-03-31T00:00:00。如果需要,可以使用不同的
datetimestyle
值来指定本地或UTC。

您不需要
默认值(DateTime)
部分,因为当将变量作为
传递出去时
仍将赋值。不,您不需要。这是一种时尚。
DateTime dt = default(DateTime);
string val = "31 Feb 09";
bool valid = DateTime.TryParseExact(val, "d MMM yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);