package com.kingschan.blog.util; import java.sql.Timestamp; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * * <pre> * 类名称:DateUtil * 类描述: 日期工具类 * 创建人:陈国祥 (kingschan) * 创建时间:2013-6-7 上午10:47:17 * 修改人:Administrator * 修改时间:2013-6-7 上午10:47:17 * 修改备注: * @version V1.0 * </pre> */ public class DateUtil { public enum Format { Month, Year, Day } /** * 得到当前系统时间yyyy-MM-dd HH:mm:ss * * @return yyyy-MM-dd HH:mm:ss */ public static String getCurrentDateTime() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date( System.currentTimeMillis())); } /** * 得到当前系统的年月日时间 * * @return YYYY-MM-DD */ public static String getCurrentDate() { return new SimpleDateFormat("yyyy-MM-dd").format(new Date(System .currentTimeMillis())); } /** * 返回两个时间相差的秒数 * @param beginDate * @param endDate * @return 秒数 */ public static Long secondsDifference(long beginDate, long endDate) { if (endDate > beginDate) { return (endDate - beginDate) / 1000; } else { return Long.valueOf(0); } } /** * 根据格式枚举格式化当前时间(Month, Year, Day) * @param format * @return 返回传入的格式 */ public static String formatCurrentDate(Format format) { String dateStr = ""; switch (format) { case Year: dateStr = new SimpleDateFormat("yyyy").format(new Date(System .currentTimeMillis())); break; case Month: dateStr = new SimpleDateFormat("MM").format(new Date(System .currentTimeMillis())); break; case Day: dateStr = new SimpleDateFormat("dd").format(new Date(System .currentTimeMillis())); break; default: break; } return dateStr; } /** * 格式化日期 * @param date 日期对象 * @return String 日期字符串 */ public static String formatDate(Date date){ SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); String sDate = f.format(date); return sDate; } /** * 在传入的日期基础上加天数 * * @param dateStr * 日期字符串 * @param days * 天数 传入负数则为减 * @return 在传入的日期基础上加天数 * @throws ParseException */ public static String appendDate(String dateStr, int days) throws ParseException { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(df.parse(dateStr)); cal.add(Calendar.DAY_OF_MONTH, days); return df.format(cal.getTime()); } /** * 在传入的日期基础上加月数 * * @param dateStr * 日期字符串 yyyy-MM-dd * @param Months * 月数 传入负数则为减 * @return 计算后的时间 yyyy-MM-dd * @throws ParseException */ public static String appendMonth(String dateStr, int Months) throws ParseException { DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); cal.setTime(df.parse(dateStr)); cal.add(Calendar.MONTH, Months); return df.format(cal.getTime()); } /** * 得到本月最大天数 * @return 本月多少天 */ public static int getCurrentMonthMaxDay() { Calendar time = Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR, Integer.valueOf(DateUtil .formatCurrentDate(Format.Year))); // year 为 int time.set(Calendar.MONTH, Integer.valueOf(DateUtil .formatCurrentDate(Format.Month)) - 1);// 注意,Calendar对象默认一月为0 int day = time.getActualMaximum(Calendar.DAY_OF_MONTH);// 本月份的天数 return day; } /** * <pre> * 得到当前日期是星期几 switch (dayOfWeek) { case 1: System.out.println("星期日");break; case 2: System.out.println("星期一"); break; case 3: System.out.println("星期二"); break; case 4: System.out.println("星期三"); break; case 5: System.out.println("星期四"); break; case 6: System.out.println("星期五"); break; case 7: System.out.println("星期六"); break; } </pre> * */ public static int getCurrentWeekDay() { Calendar c = Calendar.getInstance(); c.setTime(new Date(System.currentTimeMillis())); int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); return dayOfWeek - 1; } /** * 获取某年第一天日期 * @param year 年份 * @return Date 传入年份的第一天 */ public static Date getCurrYearFirst(int year){ Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, year); Date currYearFirst = calendar.getTime(); return currYearFirst; } /** * 获取某年最后一天日期 * @param year 年份 * @return Date 传入年份的最后一天 */ public static Date getCurrYearLast(int year){ Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, year); calendar.roll(Calendar.DAY_OF_YEAR, -1); Date currYearLast = calendar.getTime(); return currYearLast; } /** * 得到本月第一天 * @return 本月第一天 */ public static String getCurrentMonthFirstDay(){ Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天 String first = DateUtil.formatDate(c.getTime()); return first; } /** * 得到本月最后一天 * @return 本月最后一天 */ public static String getCurrentMonthLastDay(){ Calendar ca = Calendar.getInstance(); ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); String last = DateUtil.formatDate(ca.getTime()); return last; } public void getCallInfo() { StackTraceElement stack[] = Thread.currentThread().getStackTrace(); System.out.println(String.format("调用对象:%s.%s", stack[2].getClassName(),stack[2].getMethodName())); } /** * 计算两日期差 * @param date1 * @param date2 * @return 返回相差天数 */ public static long dateDiff(Date date1,Date date2){ long diff = date1.getTime() - date2.getTime(); long days = diff / (1000 * 60 * 60 * 24); return days; } /** * 计算两日期差 * @param date1 * @param date2 * @return 返回相差天数 */ public static long dateDiff(String date1,String date2){ DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d1 = null; Date d2 = null; try { d1 = df.parse(date1); d2 = df.parse(date2); } catch (Exception e) { e.printStackTrace(); } return dateDiff(d1, d2); } /** * 得到人性化提示时间差 * @param times * @return */ public static String timeSummary(String times){ Timestamp st =TimeStampUtil.convertStringToTimeStamp(times); String shortTime=new SimpleDateFormat("HH:mm").format(st); long time1=st.getTime(); long time2 =System.currentTimeMillis(); double result=(time2-time1)/1000;//这个是秒数 double year=60*60*24*365; double month=60*60*24*30; double week=60*60*24*7; double day=60*60*24; double hour=60*60; double minute=60; String s=""; if (result>year) { double d= result/year; if (result%year!=0) { String t=String.valueOf(d).replaceAll("\\d+\\.", ""); t=t.substring(0,1); int td=Integer.valueOf(t); if (td>=5&&td<=7) { return s=String.format("%s年半前", (int)d); } } s=String.format("%.0f年前", d); }else if (result>month) { int d =(int) (result/month); if (d==1) { s="上个月"; }else if (d>=6&&d<=7) { s="半年前"; }else{ s=String.format("%s个月前",d); } }else if (result>week){ int d =(int) (result/week); if (d==1) { s="上个星期"; }else if (d==2||d==3) { s="半个月前"; }else{ s=String.format("%s天前", (int) (result/day)); } }else if (result>day){ int d =(int) (result/day); if (d==1) { s=String.format("昨天%s", shortTime); }else if (d==2) { s=String.format("前天%s", shortTime); }else{ s=String.format("%s天前", d); } }else if (result>hour){ s=String.format("%.0f个小时前", result/hour); }else if (result>minute){ int d =(int) (result/minute); if (d>=25&&d<=40) { s="半个小时前"; }else{ s=String.format("%s分钟前",d); } }else{ s="刚刚"; } return s; } }