content: 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;
  	}
  	
  }
  