我正在尝试编写一个代码,告诉我还有多少天要上大学,但我无法在当前日期完成。我可以很容易地通过设置日期来实现,但我想要当前日期,所以我必须使用日历方法,但不能使用它来计算。我的代码:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar calendar = Calendar.getInstance();
Date start = sdf.parse("10/06/2022");
System.out.println(start - calendar.getTime());
tl;dr
ChronoUnit.DAYS.between(
LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) ,
LocalDate.parse( "10/06/2022" , DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) )
)
详细信息
您使用的是糟糕的日期-时间类,这些类在几年前被JSR310中定义的现代java.time类所取代。切勿使用Date
/Calendar
。
此外,您正试图使用一个日期-时间类来表示一天中的时间为UTC(偏移量为零(的日期,以保持仅限日期的值。方桩,圆孔。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate graduationDate = LocalDate.parse( "10/06/2022" , f ) ;
确定今天的日期。这需要一个时区。在任何特定时刻,全球各地的日期都会因时区而异。
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ; // Or ZoneId.systemDefault()
LocalDate today = LocalDate.now( z ) ;
使用java.time.temporal.ChronoUnit
计算运行时间。
long days = ChronoUnit.DAYS.between( today , graduationDate ) ;
请在IdeOne.com上实时查看此代码。
graduationDate: 2022-06-10
today: 2022-03-05
days: 97
提示:了解以文本形式交换日期时间值的ISO 8601标准。
Calendar calendar = Calendar.getInstance();
Calendar collegeDate = Calendar.getInstance();
collegeDate.set(Calendar.DATE,10);
collegeDate.set(Calendar.MONTH, 5);
collegeDate.set(Calendar.YEAR, 2022);
System.out.println(Duration.between(calendar.toInstant(), collegeDate.toInstant()).toDays());
你可以试试这个
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Calendar calendar = Calendar.getInstance();
Date start = sdf.parse("10/06/2022");
long dif = Math.abs(calendar.getTimeInMillis() - start.getTime());
long result = TimeUnit.DAYS.convert(dif, TimeUnit.MILLISECONDS);
System.out.println(result);