java中的日历获得年度问题

时间:2014-12-27 14:01:05

标签: 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日 但是年变量将是2014年而不是2015年

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

3 个答案:

答案 0 :(得分:0)

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);
}

答案 1 :(得分:0)

我写了这个方法,我猜它是我的问题的答案:

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);
}

答案 2 :(得分:0)

正如您在Java中的post中所看到的,WEEK_OF_YEAR是本地依赖的;各个国家/地区有不同的规则。

您可能遇到的另一个问题:这是一周的第一天? (周日?或周一?),所以将您选择的区域设置与sDateCalendar.setFirstDayOfWeek(Calendar.MONDAY);(或SUNDAY)合并。

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