使用JodaTime获取本地化的周数

Arn*_*lle 10 java jodatime

我想用JodaTime获得当前的周数.

在法国,周定义如下:

  • 一周从星期一开始(而星期日在美国开始).
  • 一年中的第一周是包含1月4日的一周(而IMO,这是包含1月1日在美国的一周.是吗?我在这里做了验证).

示例:2012年1月1日是星期日.因此,

  • 据法国日历,它属于周522011.
  • 据美国日历,它属于周12012

使用JodaTime,我发现我可以使用以下方法获取周数DateTime#getWeekOfWeekyear().

我认为通过指定正确的TimeZone,我会得到一个本地化的结果:

DateTime dtFr = new DateTime(2012, 1, 1, 11,11, DateTimeZone.forTimeZone(TimeZone.getTimeZone("Europe/Paris")));
DateTime dtUS = new DateTime(2012, 1, 1, 11,11, DateTimeZone.forTimeZone(TimeZone.getTimeZone("US/Arizona")));
LOGGER.info("weekYear (FR) : " + dtFr.weekyear().get());
LOGGER.info("weekOfWeekYear (FR) : " + dtFr.getWeekOfWeekyear());
LOGGER.info("weekYear (US) : " + dtUS.weekyear().get());
LOGGER.info("weekOfWeekYear (US) : " + dtUS.getWeekOfWeekyear());
Run Code Online (Sandbox Code Playgroud)

输出是:

2014-03-05 11:28:08,708 - INFO - c.g.s.u.JodaTest - weekYear (FR) : 2011
2014-03-05 11:28:08,709 - INFO - c.g.s.u.JodaTest - weekOfWeekYear (FR) : 52
2014-03-05 11:28:08,709 - INFO - c.g.s.u.JodaTest - weekYear (US) : 2011
2014-03-05 11:28:08,709 - INFO - c.g.s.u.JodaTest - weekOfWeekYear (US) : 52
Run Code Online (Sandbox Code Playgroud)

我原以为:

  • weekYear(美国):2012
  • weekOfWeekYear(美国):1

我的代码中有什么问题吗?

Men*_*ild 5

对于本地化周数的问题的悲伤答案:JodaTime不支持它,只支持ISO-8601周数的定义.我知道很多用户这就像一个节目塞子.这里旧的java.util.* - 东西显然更好.

在JodaTime中实现此功能的唯一方法是引入一个专门的日期时间字段,但实际上并不容易实现,因为项目负责人自己承认.这在2007年已经被注意到了,但此后一无所获.

顺便说一句,时区与本地周数的问题无关,所以你不能用任何类型的时区配置来解决这个旧的Joda问题.