如何使用 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());

两点:

  1. 周编号因地区而异。因此,您通过在代码中明确表示您想要周数的区域设置来做正确的事情(虽然我认为世界上大多数区域设置都同意 2019 年 12 月 31 日在 2020 年的第 1 周,但同一协议并不扩展到所有日期)。
  2. DateCalendarGregorianCalendar 设计不佳且早已过时。不要使用其中任何一个。使用 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);

输出与之前相同。

链接