c#:如何解析和验证具有自动生成格式的日期时间字符串



我正在使用生成字符串日期时间值

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属性来确保值位于支持的范围内"或者您可以测试自己的自定义日期范围。希望能有所帮助。

相关内容

  • 没有找到相关文章

最新更新