从0开始获取周的范围

时间:2014-11-03 05:33:47

标签: java date simpledateformat

我正在使用以下来获得一年中的一周

SimpleDateFormat dateFormatforYearWeek = new SimpleDateFormat("yyyyww");
String s = dateFormatforYearWeek.format(date)

对于10月26日,这给了我201444的价值。但是我想让它成为201443。 我不确定如何将一年中的一周设为0。 可能吗?如果不是我怎么能修改它。

这是正确的方法吗?

int day = calendar.get(Calendar.DAY_OF_MONTH);
int year = calendar.get(Calendar.YEAR);
calendar.add(Calendar.WEEK_OF_YEAR, -1);
calendar.set(Calendar.DAY_OF_MONTH, day);
calendar.set(Calendar.YEAR, year);

SimpleDateFormat dateFormatforYearWeek = new SimpleDateFormat("yyyyww");
String s = dateFormatforYearWeek.format(date)

3 个答案:

答案 0 :(得分:0)

这篇文章可以帮到你:

Why dec 31 2010 returns 1 as week of year?

尝试这样的事情:

       Calendar calDe = Calendar.getInstance(Locale.GERMAN);       

答案 1 :(得分:0)

我可能会采用以下方式:

SimpleDateFormat dateFormatForYear = new SimpleDateFormat("yyyy");
SimpleDateFormat yearWeekFormat    = new SimpleDateFormat("w");
Integer          weekFrom0         = Integer.valueOf(yearWeekFormat.format(date)) - 1;
String           s                 = dateFormatForYear.format(date) + weekFrom0; 

答案 2 :(得分:0)

一周是什么?

SimpleDateFormat的文档未能按周定义它们的含义。其他消息来源表明他们打算采用标准的ISO 8601定义。但是他们通过定义calendar.getMinimalDaysInFirstWeek() == 1而不是4来违反了这一点,正如this other Answer中所讨论的那样。

你的问题中一年中的一周是什么意思?

ISO 8601

如上所述,ISO 8601将一周中的一周定义为星期一开始,并且第一周包含一年中的第一个星期四。

此标准还定义了表示一年中一周的字符串格式:YYYY-WwwYYYYWww。请注意中间的W。这封信很重要,因为它避免了year-month格式YYYY-MM的含糊不清。我建议你尽可能符合ISO 8601。

从零开始的周计数

我从来没有听说从零开始数周。这对我没有意义;我建议尽可能避免这种情况。

如果不可能,我建议您使用日期时间库来计算一年中的标准星期并减去一周。但我确信这是一条糟糕的旅行之路。

时区

时区对于确定日期乃至一周至关重要。在巴黎周日结束的午夜时分意味着在法国新的一周,而在蒙特利尔仍然是“上周”。

约达时间

Java中旧的date-tim类出了名的麻烦,令人困惑和有缺陷:java.util.Date,java.util.Calendar,java.text.SimpleDateFormat。避免它们。

而是使用Joda-Time或Java 8中内置的java.time包(受Joda-Time启发)。

DateTime now = DateTime.now( DateTimeZone.forID( "America/Montreal" ) );
String output = ISODateTimeFormat.weekyearWeek().print( now );

跑步时。

now: 2014-11-03T02:30:10.124-05:00
output: 2014-W45

如果你必须坚持这个从零开始的周数:

int zeroBasedWeekNumber = ( now.getWeekOfWeekyear() - 1 ) ;