Java日历返回不同的日期

Java日历返回不同的日期,java,Java,我做了以下工作: Calendar c = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin")); c.setFirstDayOfWeek(Calendar.MONDAY); c.set(Calendar.DAY_OF_MONTH, 9); c.set(Calendar.MONTH, 3); c.set(Calendar.YEAR, 2011); c.set(Calendar.HOUR_OF_DAY, 10); c.set(Cal

我做了以下工作:

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin"));
c.setFirstDayOfWeek(Calendar.MONDAY);
c.set(Calendar.DAY_OF_MONTH, 9);
c.set(Calendar.MONTH, 3);
c.set(Calendar.YEAR, 2011);
c.set(Calendar.HOUR_OF_DAY, 10);
c.set(Calendar.MINUTE, 20);
int week = c.get(Calendar.WEEK_OF_YEAR)
在我的本地机器上,我的时区是欧洲/柏林。在我的服务器上是UTC。 在本地框上运行此代码将返回week=14。 在我的服务器上运行此代码将返回week=15

我没有主意了,有人能给我解释一下吗?这给我带来了很大的麻烦:-(

谢谢你的指点

干杯,
Christian

这是您的区域设置。使用Deu de java区域设置时,一周为14,使用en_US区域设置时,一周为15。将两台计算机设置为相同的区域设置,它们现在应该可以工作了

我只测试了我的地区与德国地区,无法在网上找到可靠的列表,列出哪些地区的周数发生了变化,但我肯定这是你的问题

要以编程方式查看您的区域设置,请执行以下操作:

 Locale.getDefault();
要更改Windows 7中的区域设置,请执行以下操作:

 Control Panel --> Region & Language --> Location Tab  --> Current Location

你确定你得到了不同的结果吗?从代码片段来看,它在哪个时区并不重要,因为你正在手动设置一天中的日期和时间。在我的脑海中,这段代码将始终返回15。是的,我非常确定:我从Junit测试中复制了它。它在本地运行,但在我的服务器上失败。:-(我想你把你的副本或实验搞砸了。如果我在我的机器上运行这个代码(),设置为GMT/BST(截止日期为BST),我得到的是week=14。此外,我不明白在这种情况下,柏林时间和UTC时间有什么关系——要么是上午10:20(柏林时间),要么是上午8:20。(UTC——由于柏林将在4月的DST上,它是+2而不是+1),任何一种方式都仍然是第14周。@KevinCrowell的可能重复:我不认为它是重复的(症状太不同)。但同样的问题可能是答案。Christian,什么版本每台机器都有哪些JDK?我怀疑这确实是事实。@Christian,如果我使用的是使用
Locale.GERMAN
,我会得到
week=14
;但是如果我使用
week=15
+1将我的Locale更改为U.S,我会得到
week=15
+1;但与其更改整个应用程序的Locale,不如直接调用
c.Setminimadaysinfirstweek(1)
(在任何地方都可以看到美式风格)或
c.setminimadaysinfirstweek(7)
(在任何地方都可以看到德式风格)。这当然取决于业务需要。啊,第一周的最少天数,很好。这个答案(或一个新答案)应该描述一下这个功能,这显然不是很明显!@ruakh:你不必更改整个应用程序的区域设置。请参阅我上面评论中的链接,你只需在创建
日历时指定它即可。我的第一次测试表明这是我错过的-非常感谢。我知道该做什么:Calendar.getInstance(时区:getTimeZone(“欧洲/柏林”),地点:德国);