日期管理类 → AppDateMgr

来源:互联网 发布:javmoo.net最新域名 编辑:程序博客网 时间:2024/06/16 16:32
package com.jingewenku.abrahamcaijin.commonutil;     import com.jingewenku.abrahamcaijin.commonutil.klog.KLog;   import java.text.DateFormatimport java.text.DecimalFormatimport java.text.ParseExceptionimport java.text.SimpleDateFormatimport java.util.Calendarimport java.util.Dateimport java.util.Locale;   /** * @Description:主要功能:时间日期管理 * * @Prject: CommonUtilLibrary * @Package: com.jingewenku.abrahamcaijin.commonutil * @author: june * @date: 2017年05月05日 14:18 * @Copyright: 个人版权所有 * @Company: * @version: 1.0.0 */   public class AppDateMgr {   public AppDateMgr() { throw new UnsupportedOperationException("cannot be instantiated"); }   public static final SimpleDateFormat YYYYMMDD_FORMAT= new SimpleDateFormat("yyyy-MM-dd",Locale.getDefault()); public static final SimpleDateFormat HHMMSS_FORMAT= new SimpleDateFormat("HH:mm:ss",Locale.getDefault()); public static final SimpleDateFormat YYYYMMDDHHMMSS_FORMAT= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.getDefault()); private static final String[] CHINESE_ZODIAC= new String[]{"","","","","","","","","","","",""}; private static final String[] ZODIAC = new String[]{"水瓶座","双鱼座","白羊座","金牛座","双子座","巨蟹座","狮子座","处女座","天秤座","天蝎座","射手座","魔羯座"};   private static final int[] ZODIAC_FLAGS = new int[]{20, 19, 21, 21, 21, 22, 23, 23, 23, 24, 23, 22};   /** * 当天的年月日 * @return */ public static String todayYyyyMmDd() { return YYYYMMDD_FORMAT.format(newDate()); }   /** * 当天的时分秒 * @return */ public static String todayHhMmSs() { return HHMMSS_FORMAT.format(newDate()); }   /** * 当天的年月日时分秒 * @return */ public static String todayYyyyMmDdHhMmSs() { return YYYYMMDDHHMMSS_FORMAT.format(newDate()); }   /** * 获取年 * @param dateTime * @return */ public static int parseYyyy(String dateTime) { tryCalendar e = Calendar.getInstance(); Date date = YYYYMMDDHHMMSS_FORMAT.parse(dateTime); e.setTime(date); return e.get(1); } catch (ParseException var3) { var3.printStackTrace(); return 0; } }   /** * 获取年 * @param dateTime * @param simpleDateFormat * @return */ public static int parseYyyy(String dateTime, SimpleDateFormat simpleDateFormat) { tryCalendar e = Calendar.getInstance(); Date date = simpleDateFormat.parse(dateTime); e.setTime(date); return e.get(1); } catch (ParseException var4) { var4.printStackTrace(); return 0; } }   /** * 获取年 * @param date * @return */ public static int parseYyyy(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(1); }   /** * 获取月 * @param dateTime * @return */ public static int parseMm(String dateTime) { tryCalendar e = Calendar.getInstance(); Date date = YYYYMMDDHHMMSS_FORMAT.parse(dateTime); e.setTime(date); return e.get(2); } catch (ParseException var3) { var3.printStackTrace(); return 0; } }   /** * 获取月 * @param dateTime * @param simpleDateFormat * @return */ public static int parseMm(String dateTime, SimpleDateFormat simpleDateFormat) { tryCalendar e = Calendar.getInstance(); Date date = simpleDateFormat.parse(dateTime); e.setTime(date); return e.get(2); } catch (ParseException var4) { var4.printStackTrace(); return 0; } }   /** * 获取月 * @param date * @return */ public static int parseMm(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(2); }   /** * 获取日 * @param dateTime * @return */ public static int parseDd(String dateTime) { tryCalendar e = Calendar.getInstance(); Date date = YYYYMMDDHHMMSS_FORMAT.parse(dateTime); e.setTime(date); return e.get(5); } catch (ParseException var3) { var3.printStackTrace(); return 0; } }   /** * 获取日 * @param dateTime * @param simpleDateFormat * @return */ public static int parseDd(String dateTime, SimpleDateFormat simpleDateFormat) { tryCalendar e = Calendar.getInstance(); Date date = simpleDateFormat.parse(dateTime); e.setTime(date); return e.get(5); } catch (ParseException var4) { var4.printStackTrace(); return 0; } }   /** * 获取日 * @param date * @return */ public static int parseDd(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(5); }   /** * 获取年月日 * @param dateTime * @return */ public static String parseYyyyMmDd(String dateTime) { String result = "";   tryDate e = YYYYMMDDHHMMSS_FORMAT.parse(dateTime); result = YYYYMMDD_FORMAT.format(e); } catch (ParseException var3) { var3.printStackTrace(); }   return result; }   /** * 获取年月日 * @param dateTime * @param simpleDateFormat * @return */ public static String parseYyyyMmDd(String dateTime, SimpleDateFormat simpleDateFormat) { String result = "";   tryDate e = simpleDateFormat.parse(dateTime); result = YYYYMMDD_FORMAT.format(e); } catch (ParseException var4) { var4.printStackTrace(); }   return result; }   /** * 获取年月日 * @param date * @return */ public static String parseYyyyMmDd(Date date) { return YYYYMMDD_FORMAT.format(date); }   /** * 时分秒 * @param dateTime * @return */ public static String parseHhMmSs(String dateTime) { tryDate e = YYYYMMDDHHMMSS_FORMAT.parse(dateTime); return HHMMSS_FORMAT.format(e); } catch (ParseException var2) { var2.printStackTrace(); return ""; } }   /** * 时分秒 * @param dateTime * @param simpleDateFormat * @return */ public static String parseHhMmSs(String dateTime, SimpleDateFormat simpleDateFormat) { tryDate e = simpleDateFormat.parse(dateTime); return HHMMSS_FORMAT.format(e); } catch (ParseException var3) { var3.printStackTrace(); return ""; } }   /** * 时分秒 * @param date * @return */ public static String parseHhMmSs(Date date) { return HHMMSS_FORMAT.format(date); }   /** * 获取星期几 * @param dateTime * @return */ public static int getWeekNumber(String dateTime) { return getWeekNumber(string2Date(dateTime,YYYYMMDDHHMMSS_FORMAT)); }   /** * 获取星期几 * @param dateTime * @param simpleDateFormat * @return */ public static int getWeekNumber(String dateTime, SimpleDateFormat simpleDateFormat) { return getWeekNumber(string2Date(dateTime, simpleDateFormat)); }   /** * 获取星期几 * @param date * @return */ public static int getWeekNumber(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(7); }   /** * 日期中某个月份的第几周 * @param dateTime * @return */ public static int getWeekOfMonth(String dateTime) { return getWeekOfMonth(string2Date(dateTime,YYYYMMDDHHMMSS_FORMAT)); }   /** * 日期中某个月份的第几周 * @param dateTime * @param simpleDateFormat * @return */ public static int getWeekOfMonth(String dateTime, SimpleDateFormat simpleDateFormat) { return getWeekOfMonth(string2Date(dateTime, simpleDateFormat)); }   /** * 日期中某个月份的第几周 * @param date * @return */ public static int getWeekOfMonth(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(4); }   /** * 日期中某个年份的第几周 * @param time * @return */ public static int getWeekOfYear(String time) { return getWeekOfYear(string2Date(time,YYYYMMDDHHMMSS_FORMAT)); }   /** * 日期中某个年份的第几周 * @param time * @param simpleDateFormat * @return */ public static int getWeekOfYear(String time, SimpleDateFormat simpleDateFormat) { return getWeekOfYear(string2Date(time, simpleDateFormat)); }   /** * 日期中某个年份的第几周 * @param date * @return */ public static int getWeekOfYear(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(3); }   /** * 将年月日时分秒转成Long类型 * @param dateTime * @return */ public static Long dateTimeToTimeStamp(String dateTime) { tryDate e = YYYYMMDDHHMMSS_FORMAT.parse(dateTime); return Long.valueOf(e.getTime()/ 1000L); } catch (ParseException var2) { var2.printStackTrace(); return Long.valueOf(0L); } }   /** * 将Long类型转成年月日时分秒 * @param timeStamp * @return */ public static String timeStampToDateTime(Long timeStamp) { return YYYYMMDDHHMMSS_FORMAT.format(newDate(timeStamp.longValue()* 1000L)); }   /** * 将年月日时分秒转成Date类型 * @param time * @return */ public static Date string2Date(String time) { return string2Date(time, YYYYMMDDHHMMSS_FORMAT); }   /** * 将年月日时分秒转成Date类型 * @param time * @param simpleDateFormat * @return */ public static Date string2Date(String time, SimpleDateFormat simpleDateFormat) { tryreturn simpleDateFormat.parse(time); } catch (ParseException var3) { var3.printStackTrace(); return null; } }   /** * 将Date类型转成年月日时分秒 * @param date * @return */ public static String date2String(Date date) { return date2String(date, YYYYMMDDHHMMSS_FORMAT); }   /** * 将Date类型转成年月日时分秒 * @param date * @param simpleDateFormat * @return */ public static String date2String(Date date, SimpleDateFormat simpleDateFormat) { return simpleDateFormat.format(date); }   /** * 比较日期 * @param standDate * @param desDate * @return */ public static boolean dateIsBefore(String standDate, String desDate) { tryreturn YYYYMMDDHHMMSS_FORMAT.parse(desDate).before(YYYYMMDDHHMMSS_FORMAT.parse(standDate)); } catch (ParseException var3) { var3.printStackTrace(); return false; } }   /** * 相差多少分钟 * @param beginDate * @param endDate * @return */ public static long minutesBetweenTwoDate(String beginDate, String endDate) { long millisBegin = dateTimeToTimeStamp(beginDate).longValue(); long millisEnd = dateTimeToTimeStamp(endDate).longValue(); return (millisEnd - millisBegin) / 60L; }   /** * 获取日期中的生肖 * @param dateTime * @return */ public static String getChineseZodiac(String dateTime) { int yyyy = parseYyyy(dateTime); return getChineseZodiac(yyyy); }   /** * 获取日期中的生肖 * @param dateTime * @param simpleDateFormat * @return */ public static String getChineseZodiac(String dateTime, SimpleDateFormat simpleDateFormat) { int yyyy = parseYyyy(dateTime, simpleDateFormat); return getChineseZodiac(yyyy); }   /** * 获取日期中的生肖 * @param date * @return */ public static String getChineseZodiac(Date date) { int yyyy = parseYyyy(date); return getChineseZodiac(yyyy); }   /** * 获取日期中的生肖 * @param year * @return */ public static String getChineseZodiac(intyear) { return CHINESE_ZODIAC[year %12]; }   /** * 获取日期中的星座 * @param dateTime * @return */ public static String getZodiac(String dateTime) { int dd = parseDd(dateTime); int month = parseMm(dateTime); return getZodiac(month, dd); }   /** * 获取日期中的星座 * @param dateTime * @param simpleDateFormat * @return */ public static String getZodiac(String dateTime, SimpleDateFormat simpleDateFormat) { int dd = parseDd(dateTime, simpleDateFormat); int month = parseMm(dateTime, simpleDateFormat); return getZodiac(month, dd); }   /** * 获取日期中的星座 * @param date * @return */ public static String getZodiac(Date date) { int dd = parseDd(date); int month = parseMm(date); return getZodiac(month, dd); }   /** * 获取日期中的星座 * @param month * @param day * @return */ public static String getZodiac(int month, int day) { return ZODIAC[day >= ZODIAC_FLAGS[month -1]?month- 1:(month + 10) % 12]; }   /** * 获取日期 * * @param offset 表示偏移天数 * @return */ public String getNowDayOffset(intoffset) { Calendar m_Calendar = Calendar.getInstance(); long time = (long) m_Calendar.getTimeInMillis(); time = time + offset * 24 * 3600 * 1000Date myDate = new Date(time); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); return df.format(myDate); }   /** * 获取日期 * * @param * @return */ public String getTime(longtime) { Date myDate = new Date(time); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); return df.format(myDate); }   /** * 使指定日期向前走一天,变成“明天”的日期 * * @param cal 等处理日期 */ public void forward(Calendarcal) { int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH);//0到11 int day = cal.get(Calendar.DAY_OF_MONTH); int days = getDaysOfMonth(year, month + 1); if (day == days) {//如果是本月最后一天,还要判断年份是不是要向前滚 if (month == 11) {//如果是12月份,年份要向前滚 cal.roll(Calendar.YEAR,true); cal.set(Calendar.MONTH,0);//月份,第一月是0 cal.set(Calendar.DAY_OF_MONTH,1);   } else {//如果不是12月份 cal.roll(Calendar.MONTH,true); cal.set(Calendar.DAY_OF_MONTH,1); }   } else { cal.roll(Calendar.DAY_OF_MONTH,1);//如果是月内,直接天数加1 } }   /** * 使日期倒一天 * * @param cal */ public void backward(Calendarcal) { //计算上一月有多少天 int month = cal.get(Calendar.MONTH);//0到11 int year = cal.get(Calendar.YEAR); int days = getDaysOfMonth(year, month);//上个月的天数 int day = cal.get(Calendar.DAY_OF_MONTH); if (day == 1) {//如果是本月第一天,倒回上一月 if (month == 0) {//如果是本年第一个月,年份倒一天 cal.roll(Calendar.YEAR,false); cal.set(Calendar.MONTH,11);//去年最后一个月是12月 cal.set(Calendar.DAY_OF_MONTH,31);//12月最后一天总是31号 } else {//月份向前 cal.roll(Calendar.MONTH,false); cal.set(Calendar.DAY_OF_MONTH, days);//上个月最后一天 } } else { cal.roll(Calendar.DAY_OF_MONTH,false);//如果是月内,日期倒一天 } }   /** * 判断平年闰年 * * @param year * @return true表示闰年,false表示平年 */ public boolean isLeapYear(intyear) { if (year % 400 == 0) { return true; } else if (year % 100 != 0 && year % 4 == 0) { return true; } return false; }   /** * 计算某月的天数 * * @param year * @param month 现实生活中的月份,不是系统存储的月份,从1到12 * @return */   public int getDaysOfMonth(intyear, int month) { if (month < 1 || month > 12) { return 0; } boolean isLeapYear = isLeapYear(year); int daysOfMonth = 0switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: daysOfMonth = 31breakcase 4: case 6: case 9: case 11: daysOfMonth = 30breakcase 2: if (isLeapYear) { daysOfMonth = 29; } else { daysOfMonth = 28; }   } return daysOfMonth; }   /** * 获取当天凌晨的秒数 * * @return */ public long secondsMorning(Calendarc) { Calendar tempCalendar = Calendar.getInstance(); tempCalendar.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH),0, 0, 0); return tempCalendar.getTimeInMillis(); }   /** * 获取第二天凌晨的秒数 * * @return */ public long secondsNight(Calendarc) { Calendar tempCalendar = Calendar.getInstance(); tempCalendar.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH),0, 0, 0); forward(tempCalendar); return tempCalendar.getTimeInMillis(); }   /** * 判断某两天是不是同一天 * * @param c1 * @param c2 * @return */ public boolean isSameDay(Calendarc1, Calendar c2) {   if (c1.get(Calendar.YEAR)!= c2.get(Calendar.YEAR)) return falseif (c1.get(Calendar.MONTH)!= c2.get(Calendar.MONTH)) return falseif (c1.get(Calendar.DAY_OF_MONTH)!= c2.get(Calendar.DAY_OF_MONTH)) return falsereturn true; }   /** 日期格式:yyyy-MM-dd HH:mm:ss **/ public static final String DF_YYYY_MM_DD_HH_MM_SS= "yyyy-MM-dd HH:mm:ss";   /** 日期格式:yyyy-MM-dd HH:mm **/ public static final String DF_YYYY_MM_DD_HH_MM= "yyyy-MM-dd HH:mm";   /** 日期格式:yyyy-MM-dd **/ public static final String DF_YYYY_MM_DD= "yyyy-MM-dd";   /** 日期格式:HH:mm:ss **/ public static final String DF_HH_MM_SS = "HH:mm:ss";   /** 日期格式:HH:mm **/ public static final String DF_HH_MM = "HH:mm";   private final static long MINUTE = 60 * 1000;// 1分钟 private final static long HOUR = 60 * MINUTE;// 1小时 private final static long DAY = 24 * HOUR;// 1天 private final static long MONTH = 31 * DAY;// private final static long YEAR = 12 * MONTH;//   /** Log输出标识 **/ private static final String TAG = AppDateMgr.class.getSimpleName();   /** * 将日期格式化成友好的字符串:几分钟前、几小时前、几天前、几月前、几年前、刚刚 * * @param date * @return */ public static String formatFriendly(Date date) { if (date == null) { return null; } long diff = new Date().getTime() - date.getTime(); long r = 0if (diff > YEAR) { r = (diff / YEAR); return r + "年前"; } if (diff > MONTH) { r = (diff / MONTH); return r + "个月前"; } if (diff > DAY) { r = (diff / DAY); return r + "天前"; } if (diff > HOUR) { r = (diff / HOUR); return r + "个小时前"; } if (diff > MINUTE) { r = (diff / MINUTE); return r + "分钟前"; } return "刚刚"; }   /** * 将日期以yyyy-MM-dd HH:mm:ss格式化 * * @param dateL * 日期 * @return */ public static String formatDateTime(longdateL) { SimpleDateFormat sdf = new SimpleDateFormat(DF_YYYY_MM_DD_HH_MM_SS); Date date = new Date(dateL); return sdf.format(date); }   /** * 将日期以yyyy-MM-dd HH:mm:ss格式化 * * @param dateL * 日期 * @return */ public static String formatDateTime(longdateL, String formater) { SimpleDateFormat sdf = new SimpleDateFormat(formater); return sdf.format(newDate(dateL)); }   /** * 将日期以yyyy-MM-dd HH:mm:ss格式化 * * @param formater * 日期 * @return */ public static String formatDateTime(Date date, String formater) { SimpleDateFormat sdf = new SimpleDateFormat(formater); return sdf.format(date); }   /** * 将日期字符串转成日期 * * @param strDate * 字符串日期 * @return java.util.date日期类型 */   public static Date parseDate(String strDate) { DateFormat dateFormat = new SimpleDateFormat(DF_YYYY_MM_DD_HH_MM_SS); Date returnDate = nulltry { returnDate = dateFormat.parse(strDate); } catch (ParseException e) { KLog.v(TAG,"parseDate failed !");   } return returnDate;   }   /** * 获取系统当前日期 * * @return */ public static Date gainCurrentDate() { return new Date(); }   /** * 验证日期是否比当前日期早 * * @param target1 * 比较时间1 * @param target2 * 比较时间2 * @return true 则代表target1比target2晚或等于target2,否则比target2早 */ public static boolean compareDate(Date target1, Date target2) { boolean flag = falsetryString target1DateTime = AppDateMgr.formatDateTime(target1, DF_YYYY_MM_DD_HH_MM_SS); String target2DateTime = AppDateMgr.formatDateTime(target2, DF_YYYY_MM_DD_HH_MM_SS); if (target1DateTime.compareTo(target2DateTime)<= 0) { flag = true; } } catch (Exception e1) { KLog.e("比较失败,原因:"+ e1.getMessage()); } return flag; }   /** * 对日期进行增加操作 * * @param target * 需要进行运算的日期 * @param hour * 小时 * @return */ public static Date addDateTime(Date target, double hour) { if (null== target || hour < 0) { return target; }   return new Date(target.getTime()+ (long) (hour* 60 * 60 * 1000)); }   /** * 对日期进行相减操作 * * @param target * 需要进行运算的日期 * @param hour * 小时 * @return */ public static Date subDateTime(Date target, double hour) { if (null== target || hour < 0) { return target; }   return new Date(target.getTime()- (long) (hour* 60 * 60 * 1000)); } private static SimpleDateFormat second = new SimpleDateFormat"yy-MM-dd hh:mm:ss");   private static SimpleDateFormat day = new SimpleDateFormat("yyyy-MM-dd"); private static SimpleDateFormat detailDay = new SimpleDateFormat("yyyy年MM月dd日"); private static SimpleDateFormat fileName = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); private static SimpleDateFormat tempTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static SimpleDateFormat excelDate = new SimpleDateFormat("yyyy/MM/dd");   /** * 格式化excel中的时间 * @param date * @return */ public static String formatDateForExcelDate(Date date) { return excelDate.format(date); }   /** * 将日期格式化作为文件名 * @param date * @return */ public static String formatDateForFileName(Date date) { return fileName.format(date); }   /** * 格式化日期(精确到秒) * * @param date * @return */ public static String formatDateSecond(Date date) { return second.format(date); }   /** * 格式化日期(精确到秒) * * @param date * @return */ public static String tempDateSecond(Date date) { return tempTime.format(date); }   /** * 格式化日期(精确到秒) * * @param str * @return */ public static Date tempDateSecond(String str) { tryreturn tempTime.parse(str); } catch (ParseException e) { e.printStackTrace(); } return new Date(); } /** * 格式化日期(精确到天) * * @param date * @return */ public static String formatDateDay(Date date) { return day.format(date); }   /** * 格式化日期(精确到天) * * @param date * @return */ public static String formatDateDetailDay(Date date) { return detailDay.format(date); }   /** * 将double类型的数字保留两位小数(四舍五入) * * @param number * @return */ public static String formatNumber(doublenumber) { DecimalFormat df = new DecimalFormat(); df.applyPattern("#0.00"); return df.format(number); }   /** * 将字符串转换成日期 * * @param date * @return * @throws Exception */ public static Date formateDate(String date) throws Exceptionreturn day.parse(date); }   /** * 将字符日期转换成Date * @param date * @return * @throws Exception */ public static Date parseStringToDate(String date) throws Exceptionreturn day.parse(date); }   /** * 将double日期转换成String * @param number * @return */ public static String formatDoubleNumber(doublenumber) { DecimalFormat df = new DecimalFormat("#"); return df.format(number); }   // /** // * 身份证号转生日 // * // * @param identityCard 身份证 // * @return 生日 // */ // public static Date identityCard2Date(String identityCard) { // try { // String dateStr; // if (identityCard.length() == 18) { // dateStr = identityCard.substring(6, 14);// 截取18位身份证身份证中生日部分 // return formatDateString(dateStr, "yyyyMMdd"); // } // if (identityCard.length() == 15) { // dateStr = identityCard.substring(6, 12);// 截取15位身份证中生日部分 // return formatDateString(dateStr, "yyMMdd"); // } // return null; // } catch (Exception e) { // return null; // } // } // // /** // * 格式化日期时间字符串 // * // * @param dateString 日期时间字符串 // * @param pattern 模式 // * @return Date对象 // */ // public static Date formatDateString(String dateString, String pattern) { // try { // DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern(pattern); // return dateTimeFormatter.parseDateTime(dateString).toDate(); // } catch (Exception e) { // return null; // } // }     }