JAVA日期计算

请教问题
如何判断 2013-8-1 和 2013-8-4号 是否在同一个自然周内(8.1周四 8.4周日则是同一周,8.5周一,则不是)?

来,比比短...

[code="java"]
public static void main(String[] args) throws Exception {
DateFormat df = new SimpleDateFormat("yyyy-M-d");
System.out.println(isSameWeek(df.parse("2013-8-1"), df.parse("2013-8-4")));
System.out.println(isSameWeek(df.parse("2013-8-1"), df.parse("2013-8-5")));
}

public static boolean isSameWeek(Date d1, Date d2) {
SimpleDateFormat format = new SimpleDateFormat("yyyyww");
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.MONDAY);
format.setCalendar(c);
return format.format(d1).equals(format.format(d2));
}
[/code]

package com.in;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Caculate {

/**
 * @param args
 */
public static void main(String[] args) {
    DateFormat df = new SimpleDateFormat("yyyy-M-d");
    Date date1;
    try {
        date1 = df.parse("2013-8-1");
        Date date2 = df.parse("2013-8-4");
        boolean isSame = isSameWeek(date1,date2);
        System.out.println("isSame == " +isSame);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public static boolean isSameYear(Date date1,Date date2){
    Calendar cal = Calendar.getInstance();
    cal.setTime(date1);
    int year = cal.get(Calendar.YEAR);
    cal.setTime(date2);
    int year2 = cal.get(Calendar.YEAR);
    return year == year2;
}

public static boolean isSameWeek(Date date1,Date date2){
    boolean isSameYear = isSameYear(date1,date2);
    if(isSameYear)
      return getWeek(date1) == getWeek(date2);
    return false;
}

public static int getWeek(Date date){
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.setMinimalDaysInFirstWeek(7);
    return cal.get(Calendar.WEEK_OF_YEAR);
}

}

[code="java"]
package com.zyn.iteye;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateTest {

public static long beforeDay(Date d1,Date d2){
    long a= d1.getTime();
    long b = d2.getTime();
    long c = (b-a)/(24*3600*1000);
    return c;
}

public static boolean getFirstDate(Date d,Date d2){
    boolean flag = false;
    Calendar c = Calendar.getInstance();
    c.set(d.getYear(), d.getMonth(), d.getDay());
    c.setFirstDayOfWeek(Calendar.SUNDAY);

    int week = c.get(Calendar.DAY_OF_WEEK)-1;
    if(week==0){
        week = 7;    
    }
    Calendar c2 = Calendar.getInstance();
    c2.set(d2.getYear(), d2.getMonth(), d2.getDay());
    c2.setFirstDayOfWeek(Calendar.SUNDAY);
    int week2 = c2.get(Calendar.DAY_OF_WEEK)-1;
    if(week2==0){
        week2 = 7;
    }
    long day = beforeDay(d,d2);
    System.out.println(day+"#"+week+"#"+week2);
    if(day>=7 || day<=-7){
        flag = false;
    }else{
        if(day>0&&(7-week)>=(week2-week)){
            flag = true;
        }else if(day==0){
            flag = true;
        }else if(day<0 && week>week2){
            flag = true;
        }
    }
    return flag;
}

/**
 * @param args
 * @throws ParseException 
 */
public static void main(String[] args) throws ParseException {
    // TODO Auto-generated method stub
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    boolean flag = DateTest.getFirstDate(sdf.parse("2013-08-12"), sdf.parse("2013-08-18"));
    System.out.println(flag);
    boolean flag1 = DateTest.getFirstDate(sdf.parse("2013-08-13"), sdf.parse("2013-08-12"));
    System.out.println(flag1);
    boolean flag2 = DateTest.getFirstDate(sdf.parse("2013-08-13"), sdf.parse("2013-08-11"));
    System.out.println(flag2);
    boolean flag3 = DateTest.getFirstDate(sdf.parse("2013-08-12"), sdf.parse("2013-08-06"));
    System.out.println(flag3);

    boolean flag4 = DateTest.getFirstDate(sdf.parse("2013-08-04"), sdf.parse("2013-08-01"));
    System.out.println(flag4);
}

}

[/code]

这个问题早就有人问过了,java、js的都有,如下:
[url]http://www.iteye.com/problems/94095[/url]
[url]http://www.iteye.com/problems/94249[/url]