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
Is52
。你确定你所描述的结果吗?注意:对于超过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点