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.util.Calendar
中考虑一月是0,而不是1。有关详细信息,请参阅副本。我建议您不要使用DateFormat
、SimpleDateFormat
和Calendar
。这些类设计得很糟糕,而且早已过时,前两个类尤其麻烦。而是使用LocalDate
和DateTimeFormatter
,两者都来自。很简单:LocalDate.of(2019,3,8)。plusWeeks(1)
产生2019-03-15
。