年月日を知っていてこの日を計算するのは第x週です
/**
* 2010-1-13, bug, 2009-12-28 2010-01-02 2009 52 ,
* 2010 2010-01-03.( )
* @param endDate
* @return
*/
public static String weekOfYear(String endDate) {
String y = endDate.substring(0, 4);
String m = endDate.substring(5, 7);
String d = endDate.substring(8, endDate.length());
int year = Integer.parseInt(y);
int month = Integer.parseInt(m);
int date = Integer.parseInt(d);
String end = "";
Calendar c = new GregorianCalendar(year, month - 1, date);
c.setFirstDayOfWeek(Calendar.SUNDAY); //
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);//
c.setMinimalDaysInFirstWeek(7);
String firstWeekDay = getYearWeekFirstDay(year, 1);
int weeks = 1;
weeks = c.get(Calendar.WEEK_OF_YEAR);
int ds = java.sql.Date.valueOf(endDate).compareTo(
java.sql.Date.valueOf(firstWeekDay));
end = c.get(Calendar.YEAR) + "-" + weeks;
if (ds < 0 && month == 1) {
end = year - 1 + "-" + weeks;
}
if (weeks < 10) {
end = c.get(Calendar.YEAR) + "-0" + weeks;
}
return end;
}
String firstWeekDay = getYearWeekFirstDay(year, 1);
int ds = java.sql.Date.valueOf(endDate).compareTo(java.sql.Date.valueOf(firstWeekDay));if (ds < 0 && month == 1) {end = year - 1 + "-"+ weeks;}
ここにこのような判断を加えて、もしこのいくつかの行が取り除けば、例えば:2010-01-02は09年の第52週であるべきで、ここは:2010-05-52
肝心な問題はどこがまだはっきりしていないことだ.ここはここのポイントをまとめたもので、このような「パッチ」方式で自分で正しいアルゴリズムを実現するしかなく、ネット上でも多くのこの問題の解答を見つけたが、今でも誰がはっきり言っているのか、week_を求めているのを見ていない.of_yearの場合、setMinimalDaysInFirstWeek()はどのように設定するか、どのように処理しますか??
c.get(Calendar.WEEK_OF_YEAR)を直接使うのは知っています.c.setFirstDayOfWeek(Calendar.SUNDaY)が設定されていることを含む.//毎週の初日を日曜日に設定して2010-01-02で測定しても、まだ問題があります.
実は、c.setMinimalDaysInFirstWeek(days);この年の最初の週は最低何日ありますか?最初は1~7を試したが、いずれも問題があった.