日期:2014-05-17  浏览次数:20719 次

给定某日,求助所在周的第一天日期和最后一天日期

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

public class convertWeekByDate {


public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
// 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天

if (1 == dayWeek) {
cal.add(Calendar.DAY_OF_MONTH, -1);
}
System.out.println("要计算日期为:" + sdf.format(cal.getTime())); // 输出要计算日期
cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
System.out.println(day);
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
String imptimeBegin = sdf.format(cal.getTime());
System.out.println("所在周星期一的日期:" + imptimeBegin);
cal.add(Calendar.DATE, 6);
String imptimeEnd = sdf.format(cal.getTime());
System.out.println("所在周星期日的日期:" + imptimeEnd);
}
}


cal.setFirstDayOfWeek(Calendar.MONDAY);已经设置了周一才是第一天 今天是周四 为什么我输出System.out.println(day);时候显示的是5呢?这不还是按照周日是第一天了么?

而且后面的cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);和cal.add(Calendar.DATE, 6);
是在干什么呢?看了很久也没想出来=。=求指导

虽然有不明白的地方但是这个程序居然运行是正确的=。=

------解决方案--------------------
楼主拿2012-02-05这个日期试一下,就会发现这个程序还是有小bug的
------解决方案--------------------
探讨
cal.setFirstDayOfWeek(Calendar.MONDAY);已经设置了周一才是第一天 今天是周四 为什么我输出System.out.println(day);时候显示的是5呢?这不还是按照周日是第一天了么?

------解决方案--------------------
探讨
而且后面的cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);和cal.add(Calendar.DATE, 6);
是在干什么呢?看了很久也没想出来=。=求指导

------解决方案--------------------
给个对时间进行处理的工具类你看看。看对你有帮助没。。。

Java code

package tools.util;

import java.sql.Timestamp;
import java.text.MessageFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * <p>
 * Title: 日期处理类
 * </p>
 * <p>
 * Description: 日期处理类
 * </p>
 * 
 * @author zbxu
 * @version $Revision: 1.3 $ $Date: 2006/10/27 11:46:35 $
 */
/**
 * @author zjli
 *
 */
public class DateTools
{

    // the following const is to define date format.
    public static final int FMT_DATE_YYYYMMDD = 1;

    public static final int FMT_DATE_YYYYMMDD_HHMMSS = 2;

    public static final int FMT_DATE_HHMMSS = 3;

    public static final int FMT_DATE_HHMM = 4;

    /**
     * 将特定格式的字符串转换成java.util.Date对象
     * <p>
     * 
     * @param strDate
     *            a date string
     * @param nFmtDate
     *            specific date string format defined in this class.
     * @return Date
     * @throws Exception
     */
    public static Date parseDate(String strDate, int nFmtDate) throws Exception
    {
        SimpleDateFormat fmtDate = new SimpleDateFormat();
        switch (nFmtDate)
        {
        default:
        case DateTools.FMT_DATE_YYYYMMDD:
            fmtDate.applyLocalizedPattern("yyyy-MM-dd");
            break;
        case DateTools.FMT_DATE_YYYYMMDD_HHMMSS:
            fmtDate.applyLocalizedPattern("yyyy-MM-dd HH:mm:ss");
            break;
        case DateTools.FMT_DATE_HHMM:
            fmtDate.applyLocalizedPattern("HH:mm");
            break;
        case DateTools.FMT_DATE_HHMMSS:
            fmtDate