【问题标题】:Compare java.util.Calendar date to java.util.Date比较 java.util.Calendar 日期和 java.util.Date
【发布时间】:2018-05-15 12:02:15
【问题描述】:

我需要比较日历时间和日期。我写了下面的代码。

Calendar now = Calendar.getInstance();
now.set(Calendar.SECOND, 0);
Date date = new Date();
date.setSeconds(0);
System.out.println(date);
System.out.println(now.getTime());
System.out.println(date.compareTo(now.getTime()));

输出是

Fri Dec 01 16:54:00 IST 2017
Fri Dec 01 16:54:00 IST 2017
1

似乎实用日期大于日历日期。为什么会失败?比较这些日期的书写方式是什么?

编辑 1:- 我的问题是我需要将 util 日期(存储在数据库中)比方说 2017-12-01 16:41:00.0 与当前日期和时间,什么是写入方法?

【问题讨论】:

  • 毫秒/纳秒可以关闭吗?
  • 毫秒而不是纳秒,但是是的,那肯定是有问题的。显示 Date.getTime() 以明确表示哪些值。不过,这仍然不会总是显示 0,因为时钟可能会在构造日历和构造日期之间“滴答”。
  • 注意:即使您更正了这一点,即使在截断秒数之后,日期也可能有更新的时间,因为它在本例中稍晚一些。
  • 请注意 Date.setSeconds 已被弃用。从技术上讲,Date 类已经/将被弃用。
  • 顺便说一句,您根本不想比较两者。 DateCalendar 这两个类早已过时并被 java.time, the modern Java date and time API 取代。这在日期和日历之间没有相同的区别,因此您永远不会遇到问题。我强烈建议您改用java.time

标签: java java.util.date date-comparison java.util.calendar


【解决方案1】:

检查毫:

    System.out.println(now.getTime().getTime());
    System.out.println(date.getTime());
    System.out.println(now.getTime().getTime() - date.getTime());

然后您会发现(有时)存在差异。

【讨论】:

  • 是的,我得到了一个负值。这意味着使用日期大于日历日期。
  • 是的,您在创建now 之后创建date。所以date 会更大(或与now 相同)。 (如果您喜欢这个答案,请随时将其标记为“已接受”。)
  • 我明白你说的。但我的问题是,如果我需要将 util 日期(存储在数据库中)与当前日期和时间进行比较,什么是写入方法?
  • 你可以比较 now.getTime().getTime() / 1000 == date.getTime() / 1000 (尽管它不是很漂亮)。
【解决方案2】:

删除秒/毫秒的简单方法是计算分钟数

// compare the minutes, ignoring the seconds/milli-seconds.
if (now.getTime().getTime() / 60_000 == date.getTime() / 60_000)

你也可以使用 TimeUnit

if (TimeUnit.MILLISECONDS.toMinutes(now.getTime().getTime()) == 
    TimeUnit.MILLISECONDS.toMinutes(date.getTime()))

如果您更喜欢使用库而不是数学。

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    相关资源
    最近更新 更多