2

我对 Java 中的日历有一些问题。当我在日历中添加几周时,它在某些情况下无法正常工作。例如。将 week_of_yer 设置为 3,然后添加 -3 周;)在大多数情况下效果很好,但在 2010 年、2016 年等情况下效果不佳(今年是 53 周后的年份)。它看起来像JDK中的错误,我认为当周数为52时它们会改变年份:D一些简单的代码:

Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, 2016);
calendar.set(Calendar.WEEK_OF_YEAR, 3);
calendar.add(Calendar.WEEK_OF_YEAR, -3);
System.out.println("rolled week: " + calendar.get(Calendar.WEEK_OF_YEAR) + " - " + calendar.get(Calendar.YEAR));

此代码的结果是:滚动周:53 - 2016:D

应该是 53 - 2015 在所有其他情况下它应该正常工作。

有没有人有类似的问题?

4

3 回答 3

4

问题是你显示的是year而不是week year。您无需对日历进行算术运算即可显示这一点。基本上你显示的是 2016 年 1 月 1 日。那一年是 2016 年,但周年(即计算一周中的一周的年份)是 2015 年。

不幸的是,据我所知,Java 没有办法获取周年。您最好使用Joda Time,它可以让您轻松完成所有这些操作:

import org.joda.time.*;

public class Test {
    public static void main(String[] args) throws Exception {
        LocalDate date = new LocalDate(2016, 1, 1);
        System.out.println(date);
        System.out.println(date.getWeekOfWeekyear());
        System.out.println(date.getWeekyear());
    }    
}

输出:

2016-01-01
53
2015
于 2012-11-23T22:45:21.527 回答
0

乔恩,你是对的。今天我注意到问题出在哪里,正是你所说的。我只对周数和年份感兴趣,所以在将数字添加到周之前,我将星期几设置为星期一。对我来说它有效。

Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.WEEK_OF_YEAR, week);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
calendar.add(Calendar.WEEK_OF_YEAR, -51);
于 2012-11-24T15:03:46.730 回答
0
于 2017-02-21T03:00:08.533 回答