Java中的当前日期

zqdjd7g9  于 11个月前  发布在  Java
关注(0)|答案(3)|浏览(150)

我正在开发一个应用程序在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(一个月一天的回溯日期)作为输出。

tpgth1q7

tpgth1q71#

你不需要任何手动操作,日历将做所有必要的日期算术自动,只需这样做

Calendar cal = new GregorianCalendar();
    cal.add(Calendar.DATE, -1);

字符串
请注意,日历中的月份从0开始,因此四月是3

11dmarpk

11dmarpk2#

这就是为什么java.util.Date实现很糟糕的一个经典例子:月份计数从零开始:

0-> January
1-> February
2-> March
3-> April.

字符串
你的意思是:

new Date(10,1,2013) //10th of January of 2013


你会得到什么:3983年2月10日(1970+2013)

q5lcpyga

q5lcpyga3#

tl;dr

LocalDate.now().minusDays( 1 ) // Yesterday.

字符串

避免使用旧的日期时间类

GregorianCalendarCalendarDate等现在都是遗留的,这些有严重缺陷的类在几年前就被JSR 310中定义的现代 java.time 类所取代。

java.time

要仅表示日期,而不表示时间和时区,请使用java.time.LocalDate
捕获当前日期需要一个时区。对于任何给定的时刻,日期在地球仪上因时区而异。

ZoneId zoneId = ZoneId.of( "Asia/Tokyo" ) ;
LocalDate today = LocalDate.now( zoneId ) ;


获取昨天的日期:

LocalDate yesterday = today.minusDays( 1 ) ;

相关问题