你能解释一下这段代码吗,为什么我们要传递月份的值,把它减一

问题描述

你能解释一下这个 java-Calendar 代码

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.MONTH,month-1);

为什么我们传递月份的值减一

calendar.set(Calendar.DAY_OF_MONTH,day);

calendar.set(Calendar.YEAR,year);

return calendar.getdisplayName(Calendar.DAY_OF_WEEK,Calendar.LONG,Locale.US).toupperCase();

解决方法

避免遗留类

与最早版本的 Java 捆绑在一起的可怕的旧日期时间类的许多问题之一是它们古怪的编号。 1 月至 12 月的月份编号为 0-11。

切勿使用这些遗留类,CalendarDate 等。

java.time

仅使用 java.time 类。

显然您想要当前日期。

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate today = LocalDate.now( z ) ;

如果您想切换月份但保留年份和月份的日期,请使用 withMonth 方法。

LocalDate ld = today.withMonth( Month.JANUARY ) ;

引用 Javadoc:

返回此 LocalDate 的副本,其中月份已更改。

如果年月日无效,则改为当月最后一个有效日。

因为您似乎想要英文大写的星期几,所以这很简单:

System.out.println( ld.getDayOfWeek() ) ;

星期日

getDayOfWeek 返回一个 DayOfWeek 枚举常量。如果您需要 String,请使用其 toString 方法。