我正在开发一个应用程序在JAVA摆动,在我想从当前日期的日期差异,如如果今天是16/04/2013
,那么它应该返回15/04/2013
.我已经尝试了以下代码:
Calendar cal = new GregorianCalendar();
Calendar cal2 = new GregorianCalendar();
cal.roll(Calendar.DAY_OF_YEAR, -1);
//if within the first 30 days, need to roll the year as well
if(cal.after(cal2)){
cal.roll(Calendar.YEAR, -1);
}
System.out.println("Year " + cal.get(Calendar.YEAR));
System.out.println("Month " + cal.get(Calendar.MONTH));
System.out.println("Day " + cal.get(Calendar.DAY_OF_MONTH));
字符串
在这段代码中,我期望得到一天的回溯日期。但是我得到了一个月的回溯日期。例如,如果今天是16/04/2013
,那么期望的输出是15/04/2013
,但是我得到了15/03/2013(一个月一天的回溯日期)作为输出。
3条答案
按热度按时间tpgth1q71#
你不需要任何手动操作,日历将做所有必要的日期算术自动,只需这样做
字符串
请注意,日历中的月份从0开始,因此四月是3
11dmarpk2#
这就是为什么java.util.Date实现很糟糕的一个经典例子:月份计数从零开始:
字符串
你的意思是:
型
你会得到什么:3983年2月10日(1970+2013)
q5lcpyga3#
tl;dr
字符串
避免使用旧的日期时间类
类
GregorianCalendar
、Calendar
、Date
等现在都是遗留的,这些有严重缺陷的类在几年前就被JSR 310中定义的现代 java.time 类所取代。java.time
要仅表示日期,而不表示时间和时区,请使用
java.time.LocalDate
。捕获当前日期需要一个时区。对于任何给定的时刻,日期在地球仪上因时区而异。
型
获取昨天的日期:
型