`
bcyy
  • 浏览: 1816579 次
文章分类
社区版块
存档分类
最新评论

如何得到某周,月的第一天和最后一天的日期

 
阅读更多
1.如何得到某周,月的第一天和最后一天的日期	Copy to clipboard
Posted by: caike
Posted on: 2006-09-01 21:08

要做一个calendar, 有个功能是按周,按月查看事件,怎么得到某个周的开始日期和结束日期呢?
GregorianCalendar now = new GregorianCalendar();
now.get(Calendar.DAY_OF_WEEK)
得到的是当天是这周的第几天。
请问怎样得到这周,月的开始日期呢?
谢谢
2.Re:如何得到某周,月的第一天和最后一天的日期 [Re: caike]	Copy to clipboard
Posted by: awrong
Posted on: 2006-09-02 00:07

WEEK_OF_MONTH,当前星期是这个有的第几个星期。
DAY_OF_WEEK,得到月开始是星期几,也就是前面空几天。
WEEK_OF_YEAR,本用是本年第几周。
你用一个int[38]来排,set(int year,int month,1),每月开始的一天就是int month[DAY_OF_WEEK],然后依次排,就出来了。
3.Re:如何得到某周,月的第一天和最后一天的日期 [Re: caike]	Copy to clipboard
Posted by: caike
Posted on: 2006-09-02 12:12

用了一个笨方法解决这个问题,希望哪个大虾有更简便的方法通知偶一声

import java.util.Calendar;
import java.util.Date;

/**
 * 日期工具
 * 
 * @author Cai Ke
 * 
 */
public class DateUtil {

  /**
   * 获取给定时间所在周的第一天(Sunday)的日期和最后一天(Saturday)的日期
   * 
   * @param calendar
   * @return Date数组,[0]为第一天的日期,[1]最后一天的日期
   */
  public Date[] getWeekStartAndEndDate(Calendar calendar) {
    Date[] dates = new Date[2];
    Date firstDateOfWeek, lastDateOfWeek;
    // 得到当天是这周的第几天
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
    // 减去dayOfWeek,得到第一天的日期,因为Calendar用0-6代表一周七天,所以要减一
    calendar.add(Calendar.DAY_OF_WEEK, -(dayOfWeek - 1));
    firstDateOfWeek = calendar.getTime();
    // 每周7天,加6,得到最后一天的日子
    calendar.add(Calendar.DAY_OF_WEEK, 6);
    lastDateOfWeek = calendar.getTime();

    dates[0] = firstDateOfWeek;
    dates[1] = lastDateOfWeek;
    return dates;
  }

  /**
   * 获取给定时间所在月的第一天F的日期和最后一天的日期
   * 
   * @param calendar
   * @return Date数组,[0]为第一天的日期,[1]最后一天的日期
   */
  public Date[] getMonthStartAndEndDate(Calendar calendar) {
    Date[] dates = new Date[2];
    Date firstDateOfMonth, lastDateOfMonth;
    // 得到当天是这月的第几天
    int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
    // 减去dayOfMonth,得到第一天的日期,因为Calendar用0代表每月的第一天,所以要减一
    calendar.add(Calendar.DAY_OF_MONTH, -(dayOfMonth - 1));
    firstDateOfMonth = calendar.getTime();
    // calendar.getActualMaximum(Calendar.DAY_OF_MONTH)得到这个月有几天
    calendar.add(Calendar.DAY_OF_MONTH, calendar
        .getActualMaximum(Calendar.DAY_OF_MONTH) - 1);
    lastDateOfMonth = calendar.getTime();

    dates[0] = firstDateOfMonth;
    dates[1] = lastDateOfMonth;
    return dates;
  }
  public static void main(String[] args) {

    DateUtil dateUtil = new DateUtil();
    Calendar now = Calendar.getInstance();
    Date[] weekDates = dateUtil.getWeekStartAndEndDate(now);
    Date[] monthDates = dateUtil.getMonthStartAndEndDate(now);

    System.out.println("firstDateOfWeek: " + weekDates[0]
        + " ,lastDateOfWeek: " + weekDates[1]);
    System.out.println("firstDateOfMonth: " + monthDates[0]
        + " ,lastDateOfMonth: " + monthDates[1]);

  }
}

得到两个日期相隔的周数

	public static int computeWeek(Date startDate, Date endDate) {//得到相隔的周数


		int weeks = 0;
		Calendar beginCalendar = Calendar.getInstance();
		beginCalendar.setTime(startDate);
		Calendar endCalendar = Calendar.getInstance();
		endCalendar.setTime(endDate);
		while (beginCalendar.before(endCalendar)) {
			// 如果开始日期和结束日期在同年、同月且当前月的同一周时结束循环
			if (beginCalendar.get(Calendar.YEAR) == endCalendar.get(Calendar.YEAR) && beginCalendar.get(Calendar.MONTH) == endCalendar.get(Calendar.MONTH) && beginCalendar.get(Calendar.DAY_OF_WEEK_IN_MONTH) == endCalendar.get(Calendar.DAY_OF_WEEK_IN_MONTH)) {
				break;
			} else {
				beginCalendar.add(Calendar.DAY_OF_YEAR, 7);
				weeks += 1;
			}
		}
		return weeks;
	}

得到两个日期相隔的月份

	public static int getMonth(Date start, Date end) {
		if (start.after(end)) {
			Date t = start;
			start = end;
			end = t;
		}
		Calendar startCalendar = Calendar.getInstance();
		startCalendar.setTime(start);
		Calendar endCalendar = Calendar.getInstance();
		endCalendar.setTime(end);
		Calendar temp = Calendar.getInstance();
		temp.setTime(end);
		temp.add(Calendar.DATE, 1);

		int year = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
		int month = endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);

		if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) == 1)) {
			return year * 12 + month + 1;
		} else if ((startCalendar.get(Calendar.DATE) != 1) && (temp.get(Calendar.DATE) == 1)) {
			return year * 12 + month;
		} else if ((startCalendar.get(Calendar.DATE) == 1) && (temp.get(Calendar.DATE) != 1)) {
			return year * 12 + month;
		} else {
			return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
		}
	}

得到两个日期相隔的天数

	public static Long getDaysBetween(Date startDate, Date endDate) {  
        Calendar fromCalendar = Calendar.getInstance();  
        fromCalendar.setTime(startDate);  
        fromCalendar.set(Calendar.HOUR_OF_DAY, 0);  
        fromCalendar.set(Calendar.MINUTE, 0);  
        fromCalendar.set(Calendar.SECOND, 0);  
        fromCalendar.set(Calendar.MILLISECOND, 0);  
  
        Calendar toCalendar = Calendar.getInstance();  
        toCalendar.setTime(endDate);  
        toCalendar.set(Calendar.HOUR_OF_DAY, 0);  
        toCalendar.set(Calendar.MINUTE, 0);  
        toCalendar.set(Calendar.SECOND, 0);  
        toCalendar.set(Calendar.MILLISECOND, 0);  
  
        return (toCalendar.getTime().getTime() - fromCalendar.getTime().getTime()) / (1000 * 60 * 60 * 24);  
    } 

来源:http://www.cjsdn.net/post/print?bid=1&id=181071

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics