package com.jingewenku.abrahamcaijin.commonutil; import android.annotation.SuppressLint; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 主要功能:该工具用于App时间管理通用类 * * @Prject: CommonUtilLibrary * @Package: com.jingewenku.abrahamcaijin.commonutil * @author: AbrahamCaiJin * @date: 2017年05月04日 14:13 * @Copyright: 个人版权所有 * @Company: * @version: 1.0.0 */ @SuppressLint("SimpleDateFormat") public class AppSysDateMgr { private static SimpleDateFormat yyyyMMddFormat = new SimpleDateFormat("yyyy-MM-dd"); private static SimpleDateFormat hhmmssFormat = new SimpleDateFormat("HH:mm:ss"); private static SimpleDateFormat yyyyMMddHHmmssFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private final static ThreadLocal<SimpleDateFormat> dateFormater = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); } }; private final static ThreadLocal<SimpleDateFormat> dateFormaterFull = new ThreadLocal<SimpleDateFormat>() { @Override protected SimpleDateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; /** * 获得当前系统时间并转换成字符串(格式:yyyy-MM-dd HH:mm:ss:SSS) * @return String 当前系统时间 */ public static String getSysDateByAll(){ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS") .format(new Date()); } /** * 系统时间转换成指定格式(格式:yyyy年MM月dd日 HH时mm分ss秒SSS毫秒) * @return String 当前系统时间 */ public static String getSysDateByAllFormat(){ return new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒") .format(new Date()); } /** * 获得当前系统时间并转换成字符串(格式:yyyy-MM-dd HH:mm:ss) * @return String 当前系统时间 */ public static String getSysDateByFull(){ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); } /** * 系统时间转换成指定格式(格式:yyyy年MM月dd日 HH时mm分ss秒) * @return String 当前系统时间 */ public static String getSysDateByFullFormat(){ return new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new Date()); } /** * 获得当前系统时间并转换成字符串(格式:yyyy-MM-dd HH:mm) * @return String 当前系统时间 */ public static String getSysDateByMinute(){ return new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()); } /** * 系统时间转换成指定格式(格式:yyyy年MM月dd日 HH时mm分) * @return String 当前系统时间 */ public static String getSysDateByMinuteFormat(){ return new SimpleDateFormat("yyyy年MM月dd日 HH时mm分").format(new Date()); } /** * 获得当前系统时间并转换成字符串(格式:yyyy-MM-dd HH) * @return String 当前系统时间 */ public static String getSysDateByHour(){ return new SimpleDateFormat("yyyy-MM-dd HH").format(new Date()); } /** * 系统时间转换成指定格式(格式:yyy年MM月dd日 HH时) * @return String 当前系统时间 */ public static String getSysDateByHourFormat(){ return new SimpleDateFormat("yyyy年MM月dd日 HH时").format(new Date()); } /** * 获得当前系统时间并转换成字符串(格式:yyyy-MM-dd) * @return String 当前系统时间 */ public static String getSysDate() { return new SimpleDateFormat("yyyy-MM-dd").format(new Date()); } /** * 系统时间转换成指定格式(格式:yyy年MM月dd日) * @return String 当前系统时间 */ public static String getSysDateFormat(){ return new SimpleDateFormat("yyyy年MM月dd日").format(new Date()); } /** * 通过时间字符串转换成指定格式 * @param date 时间值 * @param dataFormat 格式为(yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss) * @return String 返回格式化时间值 */ public static Date getFormatDateByString(String date, String dataFormat) { try { return new SimpleDateFormat(dataFormat).parse(date); } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getFormatDateByString", e.getMessage().toString()); return null; } } /** * 通过时间字符串转换成指定格式 * @param date 时间值 * @param dataFormat 格式为(yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss) * @param chianDataFormat 格式可为(yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss) 或 (yyyy年MM月dd日 或 yyyy年MM月dd日 HH时mm分ss秒) * @return String 返回格式化时间值 */ public static String getFormatDateByString(String date, String dataFormat, String chianDataFormat) { try { return new SimpleDateFormat(chianDataFormat).format(new SimpleDateFormat(dataFormat).parse(date)); } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getFormatDateByString", e.getMessage().toString()); return null; } } /** * 通过时间字符串转换成指定格式(格式:yyyy年MM月dd日) * @param date 时间值 * @return String 返回格式化时间值 */ public static String getFormatDateByString(String date){ try { return new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat("yyyy-MM-dd").parse(date)); } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getFormatDateByString", e.getMessage().toString()); return null; } } /** * 通过时间字符串转换成指定格式(格式:yyyy年MM月dd日 HH时mm分ss秒) * @param date 时间值 * @return String 返回格式化时间值 */ public static String getFormatDateFullByString(String date){ try { return new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date)); } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getFormatDateFullByString", e.getMessage().toString()); return null; } } /** * 获取系统时间(格式:yyyyMMddHHmmss) * @return String 返回时间 */ public static String getNowTime() { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); return sdf.format(Calendar.getInstance().getTime()); } /** * 获取系统时间(格式:yyyyMMddHHmmss) * @return String 返回时间 */ public static String getStringTime() { SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); return df.format(new Date()); } /** * 获取系统时间(格式:yyyyMMddHHmmssSSS) * @return String 返回时间 */ public static String getStringTimeFull() { SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS"); return df.format(new Date()); } /** * 获取系统时间(格式:yyyyMMddHHmmssSSS) + 四位随机码 = 共19位随机码 * @return String 返回时间 */ public static String getStringTimeFullRandom2(){ return getStringTimeFull() + new Random().nextInt(100); } /** * 获取系统时间(格式:yyyyMMddHHmmssSSS) + 四位随机码 = 共21位随机码 * @return String 返回时间 */ public static String getStringTimeFullRandom4(){ return getStringTimeFull() + new Random().nextInt(10000); } /** * 获取系统时间(格式:yyyyMMddHHmmss) + 四位随机码 = 共12位随机码 * @return String 返回时间 */ public static String getStringTimeRandom2(){ return getStringTime() + new Random().nextInt(100); } /** * 获取系统时间(格式:yyyyMMddHHmmss) + 四位随机码 = 共14位随机码 * @return String 返回时间 */ public static String getStringTimeRandom4(){ return getStringTime() + new Random().nextInt(10000); } /** * 获取系统时间(格式:yyyyMMddHHmmss) + 六位随机码 = 共16位随机码 * @return String 返回时间 */ public static String getStringTimeRandom6(){ return getStringTime() + new Random().nextInt(1000000); } /** * 获取系统时间(格式:yyyyMMddHHmmss) + 八位随机码 = 共18位随机码 * @return String 返回时间 */ public static String getStringTimeRandom8(){ return getStringTime() + new Random().nextInt(100000000); } /** * 获取参数时间的年 * @param date 时间值 * @return String 返回年 */ public static String getSysYear(Date date){ return new SimpleDateFormat("yyyy").format(date).toString(); } /** * 获取参数时间的年 * @param date 时间值 * @return String 返回年 */ public static String getSysYear(String date){ return new SimpleDateFormat("yyyy").format(date).toString(); } /** * 获取参数时间的月 * @param date 时间值 * @return String 返回月 */ public static String getSysMonth(Date date){ return new SimpleDateFormat("MM").format(date).toString(); } /** * 获取参数时间的月 * @param date 时间值 * @return String 返回月 */ public static String getSysMonth(String date){ return new SimpleDateFormat("MM").format(date).toString(); } /** * 获取参数时间的天 * @param date 时间值 * @return String 返回天 */ public static String getSysDay(Date date){ return new SimpleDateFormat("dd").format(date).toString(); } /** * 获取参数时间的天 * @param date 时间值 * @return String 返回天 */ public static String getSysDay(String date){ return new SimpleDateFormat("dd").format(date).toString(); } /** * 获取当前时间(格式:yyyy-MM-dd) * @return String 返回时间 */ public static String getCalendarToday() { int year = 0; int moth = 0; int day = 0; Calendar c = Calendar.getInstance(); year = c.get(Calendar.YEAR); moth = c.get(Calendar.MONTH) + 1; day = c.get(Calendar.DAY_OF_MONTH); return year + "-" + moth + "-" + day; } /** * 获取当前时间的下个月份(格式:yyyy-MM-dd) * @return String 当前时间下个月份 */ public static String getCalendarTodayNextMonth() { int year = 0; int moth = 0; int day = 0; Calendar c = Calendar.getInstance(); year = c.get(Calendar.YEAR); moth = c.get(Calendar.MONTH) + 1; day = c.get(Calendar.DAY_OF_MONTH) + 2; return year + "-" + moth + "-" + day; } /** * 判断日期是否属于今天日期(精确到天) * @param sDate 日期值 * @return boolean 返回true表示是,false表示不是 */ public static boolean getSysIsToday(String sDate) { boolean falg = false; try { Date date = null; date = dateFormaterFull.get().parse(sDate); Date today = new Date(); if (date != null) { String nowDate = dateFormater.get().format(today); String timeDate = dateFormater.get().format(date); if (nowDate.equals(timeDate)) { falg = true; } } } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getSysIsToday", e.getMessage().toString()); } return falg; } /** * 检查日期是否有效 * @param year 年 * @param month 月 * @param day 日 * @return boolean */ public static boolean getDateIsTrue(String year, String month, String day){ try { String data = year + month + day; SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyyMMdd"); simpledateformat.setLenient(false); simpledateformat.parse(data); } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getDateIsTrue", e.getMessage().toString()); return false; } return true; } /** * 判断两个字符串日期的前后 * @param strdate1 字符串时间1 * @param strdate2 字符串时间2 * @return boolean * 日期与时间 */ public static boolean getDateIsBefore(String strdate1, String strdate2){ try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); AppLogMessageMgr.i("AppSysDateMgr-->>getDateIsBefore-->>strdate1: ", strdate1); AppLogMessageMgr.i("AppSysDateMgr-->>getDateIsBefore-->>strdate2: ", strdate2); return df.parse(strdate1).before(df.parse(strdate2)); } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getDateIsBefore", e.getMessage().toString()); return false; } } /** * 判断两个字符串日期的前后 * @param strdate1 字符串时间1 * @param strdate2 字符串时间2 * @return boolean */ public static boolean getDateIsEqual(String strdate1, String strdate2){ try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return df.parse(strdate1).equals(df.parse(strdate2)); } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getDateIsBefore", e.getMessage().toString()); return false; } } /** * 判断两个字符串日期的前后 * @param Longdate1 字符串时间1 * @param Longdate2 字符串时间2 * @return boolean */ public static boolean getDateIsBefore(Long Longdate1, Long Longdate2){ try { AppLogMessageMgr.i("AppSysDateMgr-->>getDateIsBefore-->>strdate1: ", Longdate1 + ""); AppLogMessageMgr.i("AppSysDateMgr-->>getDateIsBefore-->>strdate2: ", Longdate2 + ""); Longdate1 = (null == Longdate1) ? 0 : Longdate1; Longdate2 = (null == Longdate2) ? 0 : Longdate2; return Longdate1 > Longdate2 ? true : false; } catch (Exception e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getDateIsBefore", e.getMessage().toString()); return false; } } /** * 判断两个时间日期的前后 * @param date1 日期1 * @param date2 日期2 * @return boolean */ public static boolean getDateIsBefore(Date date1, Date date2) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return getDateIsBefore(df.format(date1), df.format(date2)); } // public static int getDateIsBefore(String DATE1, String DATE2) { // // DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); // try { // Date dt1 = df.parse(DATE1); // Date dt2 = df.parse(DATE2); //// if (dt1.getTime() > dt2.getTime()) { //// return 1; //// } else if (dt1.getTime() < dt2.getTime()) { //// return -1; //// } else { //// return 0; //// } //// // // if(getDateIsBefore(dt1 , dt2)){ // return -1; // }else{ // return 1; // } // } catch (Exception exception) { // exception.printStackTrace(); // } // return 0; // } /** * 判断两个字符串日期的前后 * @param strdate1 字符串时间1 * @param strdate2 字符串时间2 * @return boolean * 日期比较 * * create by huangcheng */ public static boolean getDateIsBeforeYYMMDD(String strdate1, String strdate2){ try { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); AppLogMessageMgr.i("AppSysDateMgr-->>getDateIsBefore-->>strdate1: ", strdate1); AppLogMessageMgr.i("AppSysDateMgr-->>getDateIsBefore-->>strdate2: ", strdate2); return df.parse(strdate1).before(df.parse(strdate2)); } catch (ParseException e) { e.printStackTrace(); AppLogMessageMgr.e("AppSysDateMgr-->>getDateIsBefore", e.getMessage().toString()); return false; } } /** * 日期格式字符串转换成时间戳 * * create by fuxiaosong * @return */ public static long date2TimeStamp(String date , SimpleDateFormat dateFormat){ try { return dateFormat.parse(date).getTime() / 1000; } catch (ParseException e) { e.printStackTrace(); } return 0; } /** * 计算两个日期之间相差的分钟 * * create by fuxiaosong */ public static long minuteBetweenTwoDate(String dateBegin , String dateEnd){ long millisBegin = date2TimeStamp(dateBegin , yyyyMMddHHmmssFormat); long millisEnd = date2TimeStamp(dateEnd , yyyyMMddHHmmssFormat); return (millisEnd - millisBegin) / 60; } /** * * @Title: getStringByDateDefault * @Description: 将"Tue Apr 18 15:41:37 CST 2017"转成"2017-04-18 15:41:37" * @param @param dateDefault * @param @return 设定文件 * @return String 返回类型 * @throws */ public static String getStringByDateDefault(String dateDefault) { try { SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US); Date d = sdf.parse(dateDefault); return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(d); } catch (ParseException e) { // TODO: handle exception e.printStackTrace(); } return null; // SimpleDateFormat sdf1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.UK); // try { // Date date = sdf1.parse(dateDefault); // SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // return sdf.format(date); // } catch (ParseException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } /** * @Description:2017年5月5日15时41分将年月日时分秒数字单独分割出来:2017 5 5 15 41 * @param time 2017年5月5日15时41分 * @return String */ public static String getAloneTime(String time){ String regex = "(\\d{4})年(\\d{1,2})月(\\d{1,2})日(\\d{1,2})时(\\d{1,2})"; Matcher m = Pattern.compile(regex).matcher(time); if (m.find()) { return m.group(1) + "," + m.group(2) + "," + m.group(3) + "," + m.group(4) + "," + m.group(5); } return null; } }