如何使用 GregorianCalendar 在 Java 中获取当前周数和年份?
How to get current week number and year in Java using GregorianCalendar?
我想获取当前的周数和年份。我试过以下片段
Calendar cal = new GregorianCalendar(Locale.GERMANY);
Date today = new Date();
cal.setTime(today);
int current_week = cal.get(Calendar.WEEK_OF_YEAR)
int year = cal.get(Calendar.YEAR)
对于今天的日期(2019 年 12 月 31 日),周数是 01 2020
但上面的代码给出了 01 2019.
如何获得周数 01 2020?
这里01是周数,2020是年份
您可以使用calendar.getWeekYear()
Calendar cal = new GregorianCalendar(Locale.GERMANY);
Date today = new Date();
cal.setTime(today);
int current_week = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
System.out.println("Week: "+current_week);
System.out.println("Year: "+year);
System.out.println("Week Year: "+cal.getWeekYear());
两点:
- 周编号因地区而异。因此,您通过在代码中明确表示您想要周数的区域设置来做正确的事情(虽然我认为世界上大多数区域设置都同意 2019 年 12 月 31 日在 2020 年的第 1 周,但同一协议并不扩展到所有日期)。
- 类
Date
、Calendar
和 GregorianCalendar
设计不佳且早已过时。不要使用其中任何一个。使用 java.time,现代 Java 日期和时间 API。
在代码中:
Locale userLocale = Locale.GERMANY;
WeekFields weekNumbering = WeekFields.of(userLocale);
LocalDate date = LocalDate.of(2019, Month.DECEMBER, 31);
int currentWeek = date.get(weekNumbering.weekOfWeekBasedYear());
int year = date.get(weekNumbering.weekBasedYear());
System.out.format(userLocale, "Week number: %02d %04d%n", currentWeek, year);
此片段的输出是:
Week number: 01 2020
如果你不需要数字,但需要周数作为字符串,使用 DateTimeFormatter
:
更方便
DateTimeFormatter weekFormatter = DateTimeFormatter.ofPattern("ww YYYY", userLocale);
String formattedWeek = date.format(weekFormatter);
System.out.println("Week number: " + formattedWeek);
输出与之前相同。
链接
- Oracle tutorial: Date Time 解释如何使用 java.time.
- Wikipedia article: ISO 8601
我想获取当前的周数和年份。我试过以下片段
Calendar cal = new GregorianCalendar(Locale.GERMANY);
Date today = new Date();
cal.setTime(today);
int current_week = cal.get(Calendar.WEEK_OF_YEAR)
int year = cal.get(Calendar.YEAR)
对于今天的日期(2019 年 12 月 31 日),周数是 01 2020 但上面的代码给出了 01 2019.
如何获得周数 01 2020?
这里01是周数,2020是年份
您可以使用calendar.getWeekYear()
Calendar cal = new GregorianCalendar(Locale.GERMANY);
Date today = new Date();
cal.setTime(today);
int current_week = cal.get(Calendar.WEEK_OF_YEAR);
int year = cal.get(Calendar.YEAR);
System.out.println("Week: "+current_week);
System.out.println("Year: "+year);
System.out.println("Week Year: "+cal.getWeekYear());
两点:
- 周编号因地区而异。因此,您通过在代码中明确表示您想要周数的区域设置来做正确的事情(虽然我认为世界上大多数区域设置都同意 2019 年 12 月 31 日在 2020 年的第 1 周,但同一协议并不扩展到所有日期)。
- 类
Date
、Calendar
和GregorianCalendar
设计不佳且早已过时。不要使用其中任何一个。使用 java.time,现代 Java 日期和时间 API。
在代码中:
Locale userLocale = Locale.GERMANY;
WeekFields weekNumbering = WeekFields.of(userLocale);
LocalDate date = LocalDate.of(2019, Month.DECEMBER, 31);
int currentWeek = date.get(weekNumbering.weekOfWeekBasedYear());
int year = date.get(weekNumbering.weekBasedYear());
System.out.format(userLocale, "Week number: %02d %04d%n", currentWeek, year);
此片段的输出是:
Week number: 01 2020
如果你不需要数字,但需要周数作为字符串,使用 DateTimeFormatter
:
DateTimeFormatter weekFormatter = DateTimeFormatter.ofPattern("ww YYYY", userLocale);
String formattedWeek = date.format(weekFormatter);
System.out.println("Week number: " + formattedWeek);
输出与之前相同。
链接
- Oracle tutorial: Date Time 解释如何使用 java.time.
- Wikipedia article: ISO 8601