【问题标题】:get Date without time in java [duplicate]在java中获取没有时间的日期[重复]
【发布时间】:2020-02-23 15:12:51
【问题描述】:

我想得到一个没有时间的日期,但总是失败。 以下是我的代码:

    long curLong = System.currentTimeMillis();
    curLong = curLong -  curLong % TimeUnit.DAYS.toMillis(1);
    Date date = new Date(curLong);
    System.out.println("date = " + date);

输出:

date = Mon Oct 28 08:00:00 CST 2019

有人知道为什么吗?谢谢

【问题讨论】:

  • 因为java.util.Date 代表一个瞬间。您应该改用java.time API,例如LocalDate
  • LocalDate.now() 怎么样?
  • 一般建议:不要使用java.util.Datejava.sql.Datejava.util.Calendar 以及所有相关类。忽略所有告诉您使用它们的 StackOverflow 或互联网建议。仅使用 java.time 类,并且只允许遗留代码中的上述类。
  • 你所写的应该在格林威治标准时间午夜。我不知道为什么会转换为 8 AM CST。加起来似乎不对。
  • @khelwood 格林威治标准时间 00:00t 与中国标准时间 08:00 一致,因此这可能是 CST 在这种情况下所代表的意思。这个问题也是从中国南京发布的。那些 d*rn 模棱两可的时区缩写……

标签: java java.util.date date


【解决方案1】:

不建议再使用java.util.Date。它被称为Date,但不一定只包含日期信息,还包含有关时间的信息。

使用这个:

LocalDate today = LocalDate.now();

并将其打印为

System.out.println(today.format(DateTimeFormatter.ISO_DATE);

使用 ISO 日期格式。您可以使用

定义自己的格式化模式
DateTimeFormatter.ofPattern("dd.MM.yyyy");

例如。

【讨论】:

  • 使用 DateTimeFormatter.ISO_DATE 和仅使用 toString() 之间有什么显着区别吗?
  • @Glains 我认为toString() 将提供ISO-8601 格式uuuu-MM-dd 的输出,而ISO_DATE 将在可用时添加偏移量。否则,我现在找不到明显或记录在案的差异。
【解决方案2】:

您可以使用java.time.LocalDate.now() 来获取日期。

无论如何,您的情况并没有像您期望的那样工作,因为您没有做任何事情来从日期中删除时间:您只是在“压制”它,这就是它为零的原因。如果你想继续这种方式,你总是可以substring它(我的意思是Date.toString()的子串)。

希望我能帮上忙。

【讨论】:

    【解决方案3】:

    java.util.Date 的 javadoc 声明:

    Date 类表示特定的时间瞬间,精度为毫秒。

    这就是为什么你有时间约会

    如果你想要一个日期,你可以使用:java.time.LocalDate.now() (Java 8+)

    【讨论】:

      【解决方案4】:

      首先,停止使用旧的java.util.Date。新的 Java 8 日期和时间 API 为所有日期和时间操作提供了更好的类。

      LocalDate 类完全符合您的要求。 当前日期可以通过LocalDate.now()获取。

      它还有很多功能可以加减天数、月数等,并为您考虑到所有日历的特殊情况。

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 2023-03-24
        • 2013-09-05
        • 2016-11-09
        • 2019-02-03
        相关资源
        最近更新 更多