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