如何使用GeorgianCalendar获取Java中的当前星期数和年份?

时间:2019-12-31 06:32:34

标签: java date datetime groovy calendar

我想获取当前的星期数和年份。我尝试了以下代码段

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日),周编号为 2020年1月 但以上代码给出了 01 2019

如何获取周编号为 01 2020

2 个答案:

答案 0 :(得分:3)

两点:

  1. 周编号因地区而异。因此,您通过在代码中明确表示您希望使用哪个区域设置星期数来做正确的事(尽管我认为世界上大多数区域设置都同意2019年12月31日位于2020年的第1周,但相同的协议并不延长至所有日期)。
  2. DateCalendarGregorianCalendar的设计欠佳,而且已经过时。请勿使用其中任何一个。使用现代的Java日期和时间API java.time。

在代码中:

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

此代码段的输出为:

周数:2020年1月

如果您不需要数字,而是将星期数字作为字符串,则使用DateTimeFormatter会更方便:

    DateTimeFormatter weekFormatter = DateTimeFormatter.ofPattern("ww YYYY", userLocale);
    String formattedWeek = date.format(weekFormatter);
    System.out.println("Week number: " + formattedWeek);

输出与以前相同。

链接

答案 1 :(得分:1)

您可以使用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());