/** * Java日期/时间处理类 * @author Sking */ package datetime; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; public class DateUtil { /*****-----------------Date操作------------------******/ /** * (1)计算两个日期Date之间相隔的天数 * @param start 开始日期 * @param end 结束日期 * @return 两个日期之间相隔的天数 */ public static int getIntervalDays(Date start,Date end){ if(start.after(end)){//交换,保持start时间在前 Date t=start; start=end; end=t; } long s=start.getTime(); long e=end.getTime(); return (int)((e-s)/(60*60*24*1000)+0.5); } /** * (2)获取从指定日期Date开始指定天数后的日期 * @param date 指定开始日期 * @param n 指定天数 * @return 指定日期开始指定天数后的日期 */ public static Date afterNDays(Date date,int n){ GregorianCalendar cal=new GregorianCalendar(); cal.setTime(date); cal.add(Calendar.DATE, n); return cal.getTime(); } /** * 获取当前日期所在月份的天数 * @param date 当前日期 * @return 当前日期所在月份的天数 */ public static int DaysOfMonth(Date date){ GregorianCalendar cal=new GregorianCalendar(); cal.setTime(date); return cal.getActualMaximum(Calendar.DAY_OF_MONTH); } /** * 获取指定年的指定星期 * @param year 指定年 * @param week 一年中的第几个星期 * @return 指定年的指定星期的Calendar字符串数组 * (或者Date[]) */ //public static Date[] getWeek(int year,int week) public static String[] getWeek(int year,int week){ //Date[] result=new Date[7]; String[] result=new String[7]; GregorianCalendar cal=new GregorianCalendar(); cal.set(Calendar.YEAR, year); cal.set(Calendar.WEEK_OF_YEAR,week); cal.set(Calendar.DAY_OF_WEEK,cal.getFirstDayOfWeek()); //result[0]=cal.getTime(); result[0]=cal.getTime().toString(); for(int i=1;i<7;i++){ cal.add(Calendar.DAY_OF_WEEK, 1); //result[i]=cal.getTime(); result[i]=cal.getTime().toString(); } return result; } /** * 获取指定年的第一个星期 * @param year 指定年 * @return 第一个星期的Calendar字符串数组 */ public static String[] FirstWeek(int year){ return getWeek(year,1); } /** * 获取指定年的最后一个星期 * @param year 指定年 * @return 最后一个星期的Calendar字符串数组 */ public static String[] LastWeek(int year){ GregorianCalendar cal=new GregorianCalendar(); cal.set(Calendar.YEAR, year); int last=cal.getActualMaximum(Calendar.WEEK_OF_YEAR); return getWeek(year,last); } /** * 计算某年某月包含的完整星期的个数,完整星期必须包含从 * getFirstDayOfWeek()到(getFirstDayOfWeek()+7)%7的全部日子 * @param year 指定年 * @param month 指定月 * @return 某年某月包含的完整星期的个数 * @throws Exception 月份没有在1-12之间 */ public static int FullWeekOfMonth(int year,int month) throws Exception{ if(month<1||month>12) throw new Exception("月份必须在1-12之间!"); GregorianCalendar cal=new GregorianCalendar(); int first=cal.getFirstDayOfWeek(); int weekCount=0; cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DAY_OF_MONTH, 1); int endDay=cal.getMaximum(Calendar.DAY_OF_MONTH); //剔除最开始不完整的星期部分 while(cal.get(Calendar.DAY_OF_WEEK)!=first){ cal.add(Calendar.DAY_OF_MONTH, 1); } cal.add(Calendar.DAY_OF_MONTH, 7); while(cal.get(Calendar.DAY_OF_MONTH)<=endDay &&cal.get(Calendar.MONTH)==month-1){ weekCount++; cal.add(Calendar.DAY_OF_MONTH, 7); } return weekCount; } /** * 计算某年某月横跨的星期的个数,横跨的星期不要求完整 * @param year 指定年 * @param month 指定月 * @return 某年某月横跨的星期个数 * @throws Exception 月份没有在1-12之间 */ public static int CrossWeekOfMonth(int year,int month) throws Exception{ if(month<1||month>12) throw new Exception("月份必须在1-12之间!"); GregorianCalendar cal=new GregorianCalendar(); int first=cal.getFirstDayOfWeek(); int weekCount=0; cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month-1); cal.set(Calendar.DAY_OF_MONTH, 1); int endDay=cal.getMaximum(Calendar.DAY_OF_MONTH); //剔除最开始不完整的星期部分 if(cal.get(Calendar.DAY_OF_WEEK)!=first){ weekCount++; while(cal.get(Calendar.DAY_OF_WEEK)!=first){ cal.add(Calendar.DAY_OF_MONTH, 1); } } cal.add(Calendar.DAY_OF_MONTH, 7); while(cal.get(Calendar.DAY_OF_MONTH)<=endDay &&cal.get(Calendar.MONTH)==month-1){ weekCount++; cal.add(Calendar.DAY_OF_MONTH, 7); } if(cal.get(Calendar.MONTH)==month) weekCount++; return weekCount; } /*****-----------------格式化操作------------------******/ /* * 常见的日期格式化字符串有: * 1.yyyy-MM-dd hh:mm:ss */ /** * (3)将指定日期转化为XXXX年XX月XX日XX时XX分XX秒 * @param date 指定日期 * @return XXXX年XX月XX日XX时XX分XX秒格式的时间字符串 */ public static String ToChineseStyle(Date date){ GregorianCalendar cal=new GregorianCalendar(); cal.setTime(date); int year=cal.get(Calendar.YEAR); int month=cal.get(Calendar.MONTH)+1; int day = cal.get(Calendar.DAY_OF_MONTH); int hour = cal.get(Calendar.HOUR_OF_DAY);//24小时制 int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); return year+"年"+month+"月"+day+"日"+hour+"时"+minute+"分"+second+"秒"; } public static void main(String[] args) throws Exception { } }