【问题标题】:DateFormatter printed the Date wrongly (Java)DateFormatter 错误地打印了日期(Java)
【发布时间】:2019-08-22 03:39:27
【问题描述】:

为什么打印的日期是00 而不是01

    DateFormat myFormatter = new SimpleDateFormat("dd/MM/yyyy");
    Date newDate = myFormatter.parse("01/02/2016"); //assume date today is Feb 01, 2016
    System.out.println(myFormatter.format(newDate));

控制台中打印的日期为:00/02/2016

但我想要的是:01/02/2016

请有人解释一下我的代码可能出了什么问题? 我该如何解决?

P.S:2016 年 2 月有 29 天

【问题讨论】:

  • 你确定吗?我无法重现您的问题,而且我无法理解这是如何发生的。
  • 我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalDateDateTimeFormatter
  • 要么你的问题在别处。 或者这是一个多线程问题。老式的SimpleDateFormat 不是线程安全的,因此从两个或多个不同的线程中使用它有时很容易出现此错误。 Simple Date format returns Wrong date intermittently [duplicate] 的可能重复项。
  • @OleV.V.是的,它是一个多线程程序。日期变量被传递给其他 4 个方法。最后三种方法显示正确的输出。但只有第一种方法给出不正确的输出。我会尝试使用 DateTimeFormatter。
  • 我已撤回我的投票,因为不可复制而关闭。现在我不能投票关闭作为上述问题的副本,所以如果其他人愿意这样做?

标签: java date simpledateformat date-format


【解决方案1】:

首先,调整现有代码以在此处打印输入的解析版本

System.out.println(myFormatter.format(myFormatter.parse("01/02/2016")));

在此处打印“01/02/2016”;检查您生成Date 的方式。你可以也试试

DateFormat myFormatter = new SimpleDateFormat("dd/MM/yyyy", Locale.US);

因为不知道你的系统有什么Locale

最后,可以说应该始终首先执行此操作,尝试使用调试器。

附:在新代码中,您应该首选 LocalDateDateTimeFormatter。 Java 时间 api 更加一致。

附言不确定为什么它是相关的,但你是正确的,2016 年 2 月有 29 天。

$ cal 2 2016

  February 2016
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多