Java中的当前日期

zqdjd7g9  于 2024-01-05  发布在  Java
关注(0)|答案(3)|浏览(193)

我正在开发一个应用程序在JAVA摆动,在我想从当前日期的日期差异,如如果今天是16/04/2013,那么它应该返回15/04/2013.我已经尝试了以下代码:

  1. Calendar cal = new GregorianCalendar();
  2. Calendar cal2 = new GregorianCalendar();
  3. cal.roll(Calendar.DAY_OF_YEAR, -1);
  4. //if within the first 30 days, need to roll the year as well
  5. if(cal.after(cal2)){
  6. cal.roll(Calendar.YEAR, -1);
  7. }
  8. System.out.println("Year " + cal.get(Calendar.YEAR));
  9. System.out.println("Month " + cal.get(Calendar.MONTH));
  10. System.out.println("Day " + cal.get(Calendar.DAY_OF_MONTH));

字符串
在这段代码中,我期望得到一天的回溯日期。但是我得到了一个月的回溯日期。例如,如果今天是16/04/2013,那么期望的输出是15/04/2013,但是我得到了15/03/2013(一个月一天的回溯日期)作为输出。

tpgth1q7

tpgth1q71#

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

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

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

11dmarpk

11dmarpk2#

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

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

字符串
你的意思是:

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


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

q5lcpyga

q5lcpyga3#

tl;dr

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

字符串

避免使用旧的日期时间类

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

java.time

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

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


获取昨天的日期:

  1. LocalDate yesterday = today.minusDays( 1 ) ;

展开查看全部

相关问题