解析带和不带前导零的 DateTime
Parse DateTime with and without leading zeros
我有一个文本框,用户可以在其中键入日期。我只期望以下格式:
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
等等。有没有更简单的方法来告诉方法,可以有前导零?
Parse
/TryParse
f.e 都可以毫无问题地解析它们。去德文化:
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"
我有一个文本框,用户可以在其中键入日期。我只期望以下格式:
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
等等。有没有更简单的方法来告诉方法,可以有前导零?
Parse
/TryParse
f.e 都可以毫无问题地解析它们。去德文化:
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"