java中的日历获取年份问题

java中的日历获取年份问题,java,Java,我有以下代码: Calendar sDateCalendar = Calendar.getInstance(Locale.GERMANY); int CurrentWeek = sDateCalendar.get(Calendar.WEEK_OF_YEAR); int Year = sDateCalendar.get(Calendar.YEAR); 例如,日期为2014年12月29日 CurrentWeek变量将为1,因为2015年的第一周是从2014年12月29日到2015年1月4日 但

我有以下代码:

Calendar sDateCalendar = Calendar.getInstance(Locale.GERMANY); 
int CurrentWeek = sDateCalendar.get(Calendar.WEEK_OF_YEAR); 
int Year = sDateCalendar.get(Calendar.YEAR);
例如,日期为2014年12月29日

CurrentWeek变量将为1,因为2015年的第一周是从2014年12月29日到2015年1月4日 但年份变量将是2014年,而不是2015年


你能帮我解决这个问题吗?

我写了这个方法,我想这就是我问题的答案:

static int getYearOfWeek(int year, int month, int day ){
    Calendar cc = new GregorianCalendar( year, month, day );
    int dow = cc.get(Calendar.DAY_OF_WEEK); 
    if( dow == 1 ) dow = 8;   // adjust Sunday
    int diff = Calendar.THURSDAY - dow;
    Calendar thc = new GregorianCalendar( year, month, day + diff );
    return thc.get(Calendar.YEAR);
}
public static void yearCalc() {
    Calendar sDateCalendar = Calendar.getInstance(Locale.GERMANY);
    int currentWeek = sDateCalendar.get(Calendar.WEEK_OF_YEAR);
    int currentMonth = sDateCalendar.get(Calendar.MONTH);
    int Year = sDateCalendar.get(Calendar.YEAR);
    if (currentWeek == 1 & currentMonth == 11) {
        Year = Year + 1;
    }

    sDateCalendar.set(Calendar.YEAR, Year);
    sDateCalendar.set(Calendar.WEEK_OF_YEAR, currentWeek);

    sDateCalendar.set(Calendar.DAY_OF_WEEK, 2);

    String a = sDateCalendar.getTime().toString();

    System.out.println(a);

    sDateCalendar.set(Calendar.YEAR, Year);
    sDateCalendar.set(Calendar.WEEK_OF_YEAR, currentWeek);

    sDateCalendar.set(Calendar.DAY_OF_WEEK, 8);
    String b = sDateCalendar.getTime().toString();

    System.out.println(b);
}
正如您在Java中看到的,
一年中的一周
依赖于本地;各国有不同的规则

你可能会遇到的另一个问题是:哪一天是一周的第一天?(星期天?还是星期一?),因此将您选择的区域设置与
sDateCalendar.setFirstDayOfWeek(Calendar.Monday)结合使用(或星期日)


有一种方法可以通过调用sDateCalendar.setminimadaysinfirstweek(7)来定义一周的开始时间;因此,第一周将是一年中第一个完整的(7天)周。

很明显,2014年12月29日不是2015年。因此,您必须希望
一年中的第二周
生成“53”。是吗?如果日期是2014年,为什么您希望“年”是2015年?当我在我的机器上运行此代码时
CurrentWeek
Is
52
。你确定你所描述的结果吗?注意:对于超过31/12+1/1的一周属于最后一年还是已经属于下一年,有不同的定义。场所鲍勃,事实上(根据德国DIN的定义)这一周已经属于2015年,因为它的第一周并不意味着2014年12月29日是2015年的一天。年与年之间的一周间隔是一年的5倍,或者是下一年的1倍。我用了两个例子使用这个函数:第一个是2014年12月29日,结果是2015年,这是100%正确的第二个是2014年12月28日,结果也是2015年,这是错误的啊,德拉特!日历的星期日=1,这与德国(AT,CH,…)的标准不符。那么还有其他建议吗?帮助launeCalendar.getInstance(Locale.GERMANY)的Tx有星期一的第一天否?使用此选项检查:System.out.printf(“星期一:%d%n”,sDateCalendar.getFirstDayOfWeek());星期天是1,星期一是2。。星期六是7点