Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日历设置(日历月)是如何工作的?_Java_Date_Java.util.calendar - Fatal编程技术网

Java 日历设置(日历月)是如何工作的?

Java 日历设置(日历月)是如何工作的?,java,date,java.util.calendar,Java,Date,Java.util.calendar,我正在写一个方法,可以提前几周的日期。这是我的密码: public class Date { int year; int month; int day; public Date (int year, int month, int day){ this.year = year; this.month = month; this.day = day; } public void addWeeks (int weeks){ int week = weeks

我正在写一个方法,可以提前几周的日期。这是我的密码:

public class Date {
int year;
int month;
int day;

public Date (int year, int month, int day){
    this.year = year;
    this.month = month;
    this.day = day;

}
    public void addWeeks (int weeks){
    int week = weeks * 7;
    DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.DAY_OF_MONTH, this.day);
    calendar.set(Calendar.MONTH, this.month);
    calendar.set(Calendar.YEAR, this.year);
    calendar.add(Calendar.DAY_OF_MONTH, week);
    System.out.println();
    System.out.println("Date after adding " + weeks + " weeks is: " + dateFormat.format(calendar.getTime()));
}
所以,如果我把今天的日期传给年、月、日。(2019年8月3日),然后调用addWeeks(1),例如,日期应提前为(2019年3月15日),但它会给我(2019年4月15日)。由于某种原因,这个月总是比我输入的多1个月。如果我为这个月输入2,它会给出3,如果我输入3,它会给出4

原因如下:

public static final int MONTH
:表示获取和设置的字段编号 这个月。这是特定于日历的值。第一个月 公历和儒略历中的年份为1月,即0;这个 最后取决于一年中的月数

因此,您需要:

calendar.set(Calendar.MONTH, this.month-1);

Jan: 0
Feb: 1
Mar: 2
Apr: 3
May: 4
Jun: 5
Jul: 6
Aug: 7
Sep: 8
Oct: 9
Nov: 10
Dec: 11

您可能想考虑停止使用<代码> java .UTL.Calase< /C> >,切换到 java.时间>代码>类。在任何情况下,问题是您应该只在几个月内使用常量,或者在
java.util.Calendar
中考虑一月是0,而不是1。有关详细信息,请参阅副本。我建议您不要使用
DateFormat
SimpleDateFormat
Calendar
。这些类设计得很糟糕,而且早已过时,前两个类尤其麻烦。而是使用
LocalDate
DateTimeFormatter
,两者都来自。很简单:
LocalDate.of(2019,3,8)。plusWeeks(1)
产生
2019-03-15