我不能用 Java 中的日历方法做数学,但得到了"java: bad operand types for binary operator '-'"错误



我正在尝试编写一个代码,告诉我还有多少天要上大学,但我无法在当前日期完成。我可以很容易地通过设置日期来实现,但我想要当前日期,所以我必须使用日历方法,但不能使用它来计算。我的代码:

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);

相关内容

最新更新