【问题标题】:Detect the date format C#检测日期格式 C#
【发布时间】:2018-01-22 03:12:00
【问题描述】:

我有一些自动化的 C# Windows 服务来将文本上传到数据库。 “文本”由我们无法控制的第三方应用程序生成。

我的问题是文本包含日期列。 默认日期格式为 DD/MM/YY。但有时我们会得到 MM/YY/DD

是否有任何棘手的方法可以识别或将 MM/YY/DD 转换为 DD/MM/YY。数据可能只包含三、四天的日期。所以我打算用三四天检查日期是否在公差范围内,它将被接受。其他明智的手动更正它。 例如,

14/08/17 is accepted

08/17/14 is not accepted. Logic should convert this to 14/08/17

有什么想法吗?

【问题讨论】:

  • 太模糊了,举个例子和你遇到的问题。您有一个想法,展示使用该想法的代码,然后告诉我们您遇到的问题或该方法为何行不通。
  • 您的要求是不可能的。如果输入的日期不明确,例如01/02/2017,该怎么办?这是正确的方式,它是 2 月 1 日,还是错误的方式,它是 1 月 2 日?
  • 这恐怕是注定要失败的。如果你得到 17 年 1 月 2 日,那么它可能是 2 月 1 日或 1 月 2 日。除非您可以保证获得一个日期为 13 或更多的值,否则您将无法可靠地做到这一点。
  • @JonSkeet 哈哈,我们使用了相同的日期:)
  • 你的第二个例子也可能是 2014 年 8 月 17 日,你不能说这不被任何逻辑所接受

标签: c# validation date


【解决方案1】:

你可以尝试用好的格式解析,如果没问题,它会返回日期。如果出错,您尝试使用“辅助格式”进行解析。如果一切正常,它将返回日期。

请注意,如果解析的日期提前超过 3 天,则不会算作有效日期,将返回 null。

if(DateTime.TryParseExact(input, "dd/MM/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue)
{
     int daysBetween = (dateValue-DateTime.Now).Days
     if(daysBetween < 4)
     {
          return dateValue
     }
}
if(DateTime.TryParseExact(input, "MM/yy/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue)
{
     int daysBetween = (dateValue-DateTime.Now).Days
     if(daysBetween < 4)
     {
          return dateValue;
     }
}
return null

如果返回 null,则您的日期无效,否则为解析日期

【讨论】:

  • @Dle 仅供参考。第三方应用程序是 VB 6 应用程序。如果我检查 VB6 采用的默认日期格式,它会给出一些亮点吗?
  • 如果该应用返回那些格式化的日期并且您无法控制它,我认为它不会帮助您
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2023-03-12
  • 2020-12-25
  • 1970-01-01
相关资源
最近更新 更多