我正在使用生成字符串日期时间值
string str = DataTime.Now.ToString(CultureInfo.CurrentCulture)
这给出了";09/22/2020下午5:30:01";根据我现有的本地机器设置。
在我的ui中,我将其编辑为:字符串bad_year=";09/22/202下午5:30:01";;
现在,当我尝试使用解析/验证它时
var style = System.Globalization.DateTimeStyles.AllowWhiteSpaces;
var cul = System.Globalization.CultureInfo.CurrentCulture;
DateTime.TryParse(bad_year, cul, style, out dt_out);
dt_out给出:09/22/0202下午5:30:01
我希望dt_out为null,因为它有错误的年份。知道吗?非常感谢。
(在这里,如果我们选择使用DateTime.TryParseExact(..(,那么我们必须提供我不想显式使用的格式,它应该自动从当前的CultureInfo中提取(
这是尝试过的,您可能需要额外的检查,看看在您正在构建的应用程序的上下文中,世纪是否合理
public static void Main()
{
DateTime dt_out;
var style = System.Globalization.DateTimeStyles.None;
var cul = System.Globalization.CultureInfo.CurrentCulture;
//string good_year = "03/01/2009 10:00 AM";
string bad_year = "22/03/202 05:30:01 PM";
// Attempt to convert a string.
if (DateTime.TryParse(bad_year, cul, style, out dt_out))
if(dt_out.Year <= 1900 || dt_out.Year >= 2100)
{
// Date is parsed successfully but not possible in my business context
dt_out = DateTime.MinValue;
Console.WriteLine("Unable to convert {0} to a date and time.", dt_out);
}
else
{
Console.WriteLine("{0} converted to {1} {2}.",dt_out, dt_out, dt_out.Kind);
}
else
Console.WriteLine("Unable to convert {0} to a date and time.", dt_out);
}
DateTime也是一个结构类型,这意味着它不能为null。从文档"在将值传递给DateTime构造函数之前,可以使用MinValue和MaxValue属性来确保值位于支持的范围内"或者您可以测试自己的自定义日期范围。希望能有所帮助。