Android 日期不正确

Android date is incorrect

我正在使用 Calendar class 来获取年月日:

Calendar calendar = Calendar.getInstance();

this.current_year = calendar.get(Calendar.YEAR);
this.current_month = calendar.get(Calendar.MONTH);
this.current_day = calendar.get(Calendar.DAY_OF_MONTH);

Toast.makeText(this.context, this.current_year + "-" + this.current_month + "-" + this.current_day, Toast.LENGTH_SHORT).show();

今天是 2021 年 12 月 11 日 (2021-12-11)。但是 toast 警报显示 2021-11-11。我也尝试将日历时间设置为新的 Date class 但仍然错误

Calendar.MONTH returns 值从 0 到 11。(例如 0 代表 1 月,1 代表 2 月)。因此,要显示当前月份值,您必须在 current_month 中 +1。你最后的吐司看起来像,

Toast.makeText(this.context, this.current_year + "-" + (this.current_month+1) + "-" + this.current_day, Toast.LENGTH_SHORT).show();

它会显示你想要的结果。

tl;博士

I am using Calendar class

不要。

仅使用 java.time classes.

LocalDate.now( ZoneId.systemDefault() ).getYear()

2021

详情

正确。

此外,永远不要使用Calendar。那个可怕的 class 是由不了解日期时间处理的人构建的。连同 DateSimpleDateFormat,这些 classes 在几年前被现代的 java.time classes 所取代。

指定时区以确定日期。对于任何给定时刻,日期在全球各地因时区而异。在日本可能是明天,而在加拿大是昨天。

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
LocalDate ld = LocalDate.now( z ) ;

询问零件。

与旧版 classes 不同,java.time classes 使用合理的编号。 2021 年是 2021 年,依此类推。一月到十二月的月份是 1-12。

int year = ld.getYear() ;
int month = ld.getMonthValue() ;
int day = ld.getDayOfMonth() ;