【发布时间】: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 请说出这句话的单一来源。
SimpleDateFormat、Date和Calendar已过时。 Here is why。 JSR 310 (java.time) 解决了所有提到的问题。
标签: java week-number gregorian-calendar