【问题标题】:Comparing two dates in String format比较字符串格式的两个日期
【发布时间】:2018-12-28 16:03:53
【问题描述】:

我正在尝试以整数比较两个日期(例如,10-05-2018)。这两天的格式相同,首选的解决方案是没有Date 类型。我的想法是将日期倒写并将它们作为整数进行比较,这不能作为一个反例:10,09,2018 和 09,09,2018。还有其他想法吗?谢谢!

for (int i=0; i<date.length(); i++) {
    date3 = date.charAt(i) + datum1;
    date4 = date2.charAt(i) + date2;

}

if (datum3.compareTo(datum4)>0) {
    return 1;
}
if ((datum3.compareTo(datum4)<0)) {
    return -1;

}
    return 0;
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!请使用tour(您将获得徽章!),环顾四周,并阅读help center,尤其是How do I ask a good question?,我还推荐Jon Skeet 的Writing the Perfect QuestionQuestion Checklist
  • “我的想法是将日期倒写,并将它们作为整数进行比较......” 或者实际上,作为字符串。 “...这不是一个找到反例...” 是的,它有效(如果“向后”您的意思是年月日,并且您使用完整的年份和两位数月和日)。如果您不向我们展示反例,我们无法帮助您理解为什么“反例”似乎不起作用。
  • @T.J.Crowder 2018 年 10 月 9 日和 2018 年 9 月 9 日呢?
  • 这就是为什么 ISO-8601 是一种真正的日期格式。 :)
  • “……没有 Date 类型”,这是一个绝妙的主意,因为 Date 类的设计很糟糕而且已经过时了。我强烈建议您使用LocalDate 类型和java.time, the modern Java date and time API 中的其他类。

标签: java date date-comparison


【解决方案1】:

我们使用格式为 yyyymmdd 的整数

我们可以使用常规的 int 类型,排序有效,使用的空间比 Date 少,可读

但缺少的是需要转换的日期算术运算

还要考虑 LocalDate ... Joda 的新 java 数据类型

【讨论】:

    【解决方案2】:

    我假设您不想使用java.util.Date 或其替代java.time.LocalDate,可能是因为它是一个作业。

    可以通过将每个组件转换为 int,然后在每个组件上使用 Integer.compare 来比较这些数字,每年:

    在伪代码中,这意味着:

    For each component in [Year, Month, Day]:
      n = compare(date1[component], date2[component])
      if n != 0 then 
        return n
    return 0 // all component are equals.
    

    有几种方法可以处理将组件放入 int 数组中,其中 Year = 0、Month = 1 和 Day = 2 表示每个组件在所述数组中的索引。

    您可以将整个String 转换为int[] 数组。如果您知道格式,使用Pattern(见注释)(例如Pattern.compile("^(?&lt;DAY&gt;\d+)-(?&lt;MONTH&gt;\d+-(?&lt;YEAR&gt;\d+)$"))可能是最容易验证String 遵循一些设置格式。它还允许您提取组件(使用matcher.group("DAY") 等)。

    String 与数字进行比较可以通过两种方式完成:

    • 玩得开心。
    • 使用Integer.parseInt(String)

    由于您可能应该验证组件的范围(每个月在 1 到 12 之间,天在 1 到 31 之间 [或取决于月份],...),转换为 int 将是最简单的。

    注意:对于分配,不使用java.util.Date 但允许Pattern 可能会适得其反。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2015-11-26
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多