有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java日历中的前一天时间不正确

我想在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,则会得到上述结果。但是二月不可能有31。在Calendarlib中有处理这个问题的选项吗

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

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


共 (2) 个答案

  1. # 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"是一年中的da

    注意:按照惯例,java中的变量名是小写的

  2. # 2 楼答案

    爪哇。时间

    一定要使用java。时间,现代Java日期和时间API,用于日期和时间工作。它比旧的、设计糟糕的、过时的日期时间类(包括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日)跑步时的输出:

    01/01/2020

    教程链接:Oracle tutorial: Date Time讲解如何使用java。时间到了