【问题标题】:Java GregorianCalendar: Week Of Year depends on Environment? [duplicate]Java GregorianCalendar:一年中的一周取决于环境? [复制]
【发布时间】:2021-03-25 22:34:21
【问题描述】:

我有这个……

public int getWeek(int weekOffset) {
    GregorianCalendar gc = new GregorianCalendar();
    gc.add(Calendar.WEEK_OF_YEAR, weekOffset);
    int week = gc.get(Calendar.WEEK_OF_YEAR);
    return week;
}

...这在一个循环中运行:

for (int i = 0; i < 4; i++) {
    int week = getWeek(i);

    // Debug
    System.out.println(week);

    // do something with it...
}

问题在于不同环境下的结果不同。

Eclipse(Win 10 / OpenJDK 11):

51

52

53

1

Docker (BaseImage: CentOS 7 / OpenJDK 11)

51

52

1

2

使用 RemoteDebugging 我可以看到“getWeek”的结果是问题所在。

为什么会这样?

相同的 Java,相同的时区。我需要一个提示,我必须在哪里寻找或寻找什么。

谢谢!

【问题讨论】:

  • 可能是不同的语言环境。检查两种环境中的 getFirstDayOfWeek() 值。
  • @RobbyCornelissen:你的权利!结果不同。 Win10:“2” 泊坞窗:“1”。我会仔细研究一下语言环境。
  • @RobbyCornelissen 你的权利!这真的取决于语言环境!我尝试了另一种实现: Calendar cal = Calendar.getInstance(java.util.Locale.GERMANY);但这对我来说是新的,语言环境会影响一年中的一周!
  • 当我们谈到这个主题时——你真的应该停止使用GregorianCalendar。改用 java.time 中的类,它们的设计要好得多。
  • @JekO 请说出这句话的单一来源SimpleDateFormatDateCalendar 已过时。 Here is why。 JSR 310 (java.time) 解决了所有提到的问题。

标签: java week-number gregorian-calendar


【解决方案1】:

这取决于语言环境!

不同的环境,不同的地区,会导致一年中一周的不同结果。

向 Robby Cornelissen 致敬。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多