【问题标题】:Incorrect previous day in Java Calender [duplicate]Java日历中的前一天不正确[重复]
【发布时间】:2020-06-13 21:39:59
【问题描述】:

我想在 Java 中使用 Calender 获得前一天的信息。我正在使用下面的代码。

Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, -1);
now.add(Calendar.MONTH, -2);

myDate = now.get(Calendar.MONTH) + "/" + now.get(Calendar.DATE) + "/" + now.get(Calendar.YEAR);

System.out.println(myDate);

输出:2/31/2020

上述问题并非一直有效。如上所述,如果当前日期为03/01/2020,您将获得上述结果。但是二月不能有31Calendar lib 中是否有一个选项来处理这个问题?

如果我使用下面的格式,它会给出完全不同的值。

Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, -1);
now.add(Calendar.MONTH, -2);
SimpleDateFormat df = new SimpleDateFormat("MM/DD/YYYY");
String myDate= df.format(now.getTime());

System.out.println(myDate);

输出:03/91/2020

【问题讨论】:

  • 我建议你不要使用CalendarSimpleDateFormat。这些类设计不佳且早已过时,后者尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalDateDateTimeFormatter
  • 您在哪一天运行了 sn-ps?问是因为我找不到重现您的结果的方法。当我今天(2020 年 3 月 2 日)跑步时,我从第一个 sn-p 得到 0/1/2020,从第二个 sn-p 得到 01/01/2020。假设你在 3 月 1 日跑步,我会得到 11/29/201912/363/2019

标签: java time java-8 calendar


【解决方案1】:

您的日期格式不是您想要的。尝试以下方法获取上一个日期(昨天):

Calendar now = Calendar.getInstance();
now.add(Calendar.DATE, -1);
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
String MyDate= df.format(now.getTime());

System.out.println(MyDate);

根据documentation "YYYY" 是一周年,"DD" 是一年年。

P.S.: 按照惯例,java 中的变量名都是小写的。

【讨论】:

  • 以上代码将12/29/2019作为输出。
  • @SMPH 你期待什么?今天是 01.03.20 -> 负 1 天给出 29.02.20 -> 负 2 个月给出 29.12.19
  • @SMPH 现在显示昨天(前一天)
  • 很抱歉给您带来了困惑。我按照我的第一个解决方案设置了now.add(Calendar.MONTH, -2);。必须使用您的解决方案将其删除才能获得 02/29/2020
【解决方案2】:

java.time

请使用现代 Java 日期和时间 API java.time 来处理日期和时间。它比旧的、设计不良和过时的日期时间类(包括CalendarSimpleDateFormat)要好得多。

当您需要将日期格式化为字符串时,请务必使用格式化程序。

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");

    LocalDate today = LocalDate.now(ZoneId.of("Australia/Melbourne"));
    LocalDate then = today.minusDays(1).minusMonths(2);

    String myDate= then.format(dateFormatter);

    System.out.println(myDate);

2020 年 3 月 2 日我今天跑步时的输出:

2020 年 1 月 1 日

教程链接:Oracle tutorial: Date Time解释如何使用java.time。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多