带有可选参数的{C#DateTime.TryParseExact

时间:2017-05-22 21:46:11

标签: c# .net

下面的代码运行正常,只是想知道是否有更优雅的方式来实现同样的事情?以下日期应该是有效的,除此之外的任何日期都不应该:

  • 2017年1月12日
  • 1/12/2017 11:10
  • 1/12/2017 11:10:30
  • 15/5/2017
  • 15/5/2017 11:10
  • 15/5/2017 11:10:30
  • 2017年1月5日
  • 1/5/2017 11:10
  • 1/5/2017 11:10:30
  • 25/12/2017
  • 25/12/2017 11:10
  • 25/12/2017 11:10:30

换句话说:它应该适用于1位和2位数天/月,并且它应该有或没有时间,包括或不是秒。

var validDateTimeFormats = new[]
{
   "d/MM/yyyy",
   "d/MM/yyyy HH:mm",
   "d/MM/yyyy HH:mm:ss",
   "dd/M/yyyy",
   "dd/M/yyyy HH:mm",
   "dd/M/yyyy HH:mm:ss",
   "d/M/yyyy",
   "d/M/yyyy HH:mm",
   "d/M/yyyy HH:mm:ss",
   "dd/MM/yyyy",
   "dd/MM/yyyy HH:mm",
   "dd/MM/yyyy HH:mm:ss"
};

DateTime dateTime;
if (DateTime.TryParseExact(dateTimeStr, validDateTimeFormats,
CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
   // My logic
}

1 个答案:

答案 0 :(得分:0)

感谢@Steve的建议。不需要dd和MM组合。

最终代码:

var validDateTimeFormats = new[]
{
   "d/M/yyyy",
   "d/M/yyyy HH:mm",
   "d/M/yyyy HH:mm:ss"
};

DateTime dateTime;
if (DateTime.TryParseExact(dateTimeStr, validDateTimeFormats,
CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime))
{
   // My logic
}