C# DateTime.TryParseExact 带可选参数

标签 c# .net

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

  • 1/12/2017
  • 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
  • 1/5/2017
  • 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
    }
    

    最佳答案

    感谢@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
    }
    

    关于C# DateTime.TryParseExact 带可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44122614/

    相关文章:

    c# - 如何找到 ResourceManager 中可用的资源文化?

    c# - 如何使 TaskCompletionSource.Task 使用特定的 TaskScheduler 完成

    c# - 无法在 FluentNHibernate 下使用自动 ID 更新 PostgreSQL 表

    c# - 迭代 IEnumerable,特殊套管最后一个元素

    c# - 用逗号和句点验证正数

    c# - 通过依赖注入(inject)传递计时器并配置/启动计时器

    c# - 如何在 appbase 之外加载程序集(更多信息)

    .net - Entity Framework 6 - 在插入和并发之前检查记录是否存在

    c# - 如何确定整数集合中的重复项?

    c# - .NET - 数字的字母数字表示