我有这段代码:
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年
你能帮我解决一下这个问题吗?
答案 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天)周。