【问题标题】:How to get current week number and year in Java using GregorianCalendar?如何使用 GregorianCalendar 在 Java 中获取当前周数和年份?
【发布时间】:2019-12-31 06:32:34
【问题描述】:

我想获取当前的周数和年份。我试过跟随sn-p

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 是年

【问题讨论】:

  • 我建议你不要使用CalendarGregorianCalendar。这些课程设计不佳且早已过时。而是使用LocalDatejava.time, the modern Java date and time API 中的其他类。
  • 你对周数的定义是什么?
  • 周数表示一年中的周数。例如,2019 年 12 月 30 日将显示为 1 2020。这里 1 是周数,2020 是年。

标签: java date datetime calendar


【解决方案1】:

两点:

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

这个 sn-p 的输出是:

周数:01 2020

如果你不需要数字,但需要周数作为字符串,使用DateTimeFormatter更方便:

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

输出和以前一样。

链接

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多