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