我正在使用以下来获得一年中的一周
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)
答案 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将一周中的一周定义为星期一开始,并且第一周包含一年中的第一个星期四。
此标准还定义了表示一年中一周的字符串格式:YYYY-Www
或YYYYWww
。请注意中间的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 ) ;