【问题标题】:Date format prediction by using sample of dates as input使用日期样本作为输入的日期格式预测
【发布时间】:2019-01-09 10:24:17
【问题描述】:

寻找一种将日期列表(字符串类型)作为输入并返回可能的日期格式的方法。

例如:输入是 ["01/02/2018","13/09/2018","8/11/2016"] 那么 输出应该是“dd/MM/yyyy”。

这是一个例子。它应该能够通过 java 返回最适合给定输入的所有支持的日期格式。

【问题讨论】:

  • 如果输入不受限制,则不可能,它可以是任何东西!如果输入受到限制,则尝试所有可能的格式
  • "dd/MM/yyyy" 无法解析 "13/9/2018"。选择模式的逻辑是什么?
  • @ernest_k 为什么它无法解析?我认为,它会解析,因为它不在 MM/dd/yyyy 中。
  • 问题是缺少前导零,它预计一个月有 2 位数字,但 "13/9/2018" (= "dd/M/yyyy") 只有一位。
  • 啊啊!我怎么看不到这个!谢谢@deHaar。

标签: java date date-format


【解决方案1】:

我不认为这样的方法是现成的。您需要自己编写代码。

这是可能的,尽管可能并不总是可以给出唯一的答案。

要求字符串中只有三个数字,并且每个字符串中的数字之前、之间和之后的分隔符必须相同。从每个字符串中取出第一个、第二个和第三个数字。找出每个的最小值和最大值。我以你为例:

["01/02/2018","13/9/2018","8/11/2016"]

  • 第一个数字的最小值为 1,最大值为 13
  • 第二个数字 har min 2 and max 11
  • 第三个数字的最小值为 2016,最大值为 2018

年份很简单,即最小值和最大值在 1900 到 2100 之间的数字。选择适合您情况的限制。月份是不超过 12 的数字。在您的示例中,第二个数字是自第一个最大为 13 以来的月份。如果没有非年份数字超过 12,则您无法决定并且需要抛出异常等。一旦你确定了年份和月份,你没有使用的数字就是月份中的日期。检查它是否在 1 到 31 之间以进行验证。

对于日期和月份:如果出现前导零(0102 在您的示例中)并且所有出现都有两位数,格式中需要两位数,使用ddMM。否则使用dM(它将打印足够多的数字并解析一位数和两位数输入)。因为在您的示例中,月份指定为 9(第二个字符串中的一位数)和 8 作为天,请使用 dM

最终结果:d/M/uuuud/M/yyyy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多