我有一个TextBox,用户可以在其中键入日期。我只期望以下格式:
12.12.2017
12.02.2017
12.2.2017
02.12.2017
2.12.2017
02.02.2017
2.2.2017
所以可能会有一个前导零。
我目前正在使用以下代码解析DateTime:
DateTime myDate = new DateTime();
bool success = DateTime.TryParseExact(TboDate.Text, "dd.MM.yyyy",
CultureInfo.CurrentUICulture, DateTimeStyles.None, out myDate);
使用该代码无法成功解析12.2.2017
之类的日期。但我不想每次都检查字符串,然后用匹配的格式d.M.yyyy, dd.M.yyyy, d.MM.yyyy
解析它,依此类推。有没有更简单的方法告诉方法,可以有前导零?
答案 0 :(得分:8)
可以使用Parse
/ TryParse
f.e解析所有问题。 de-DE文化:
var dates = new[] { "12.12.2017", "12.02.2017", "12.2.2017", "02.12.2017", "2.12.2017", "02.02.2017", "2.2.2017" };
foreach (var dateStr in dates)
{
DateTime dt;
if (!DateTime.TryParse(dateStr, CultureInfo.CurrentUICulture, DateTimeStyles.None, out dt))
{
Console.WriteLine("not valid: " + dateStr);
}
}
但如果您指定所有允许的格式,也可以使用ParseExact
:
string[] allowedFormats = { "dd.MM.yyyy", "d.MM.yyyy", "dd.M.yyyy", "d.M.yyyy" };
foreach (var dateStr in dates)
{
DateTime dt;
if (!DateTime.TryParseExact(dateStr, allowedFormats, CultureInfo.CurrentUICulture, DateTimeStyles.None, out dt))
{
Console.WriteLine("not valid: " + dateStr);
}
}
更新
正如Jon Skeet所说,没有必要指定多个,这会处理所有:"d.M.yyyy"