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