yujian
2019-02-26 a4d96fb3100e6aaf65e54d260921ceb1c00e54ef
utils/src/main/java/org/yeshi/utils/DateUtil.java
@@ -2,80 +2,254 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.List;
public class DateUtil {
   public static String dateDiff(String startTime, String endTime) {
      String datatime = 0 + "天" + 0 + "小时" + 0 + "分钟" ;
      String datatime = 0 + "天" + 0 + "小时" + 0 + "分钟";
      SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
      try {
         long ns = 1000;// 一秒钟的毫秒数
         long nm = 1000 * 60;// 一分钟的毫秒数
         long nh = 1000 * 60 * 60;// 一小时的毫秒数
         long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
         // 获得两个时间的毫秒时间差异
         long diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();
         long day = diff / nd;// 计算差多少天
         long hour = diff % nd / nh;// 计算差多少小时
         long min = diff % nd % nh / nm;// 计算差多少分钟
         long sec = diff % nd % nh % nm / ns;// 计算差多少秒
         //System.out.println("时间相差:" + day + "天" + hour + "小时" + min + "分钟" + sec + "秒");
         datatime = day + "天" + hour + "小时" + min + "分钟" ;
         datatime = day + "天" + hour + "小时" + min + "分钟";
      } catch (ParseException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      return datatime;
   }
   public static String dateDiff2(Date startTime, Date endTime) throws Exception{
      String datatime = 0 + "天" + 0 + "小时" + 0 + "分钟" ;
      long ns = 1000;// 一秒钟的毫秒数
   public static String dateDiff2(Date startTime, Date endTime) throws Exception {
      String datatime = 0 + "天" + 0 + "小时" + 0 + "分钟";
      long nm = 1000 * 60;// 一分钟的毫秒数
      long nh = 1000 * 60 * 60;// 一小时的毫秒数
      long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
      // 获得两个时间的毫秒时间差异
      long diff = endTime.getTime() - startTime.getTime();
      long day = diff / nd;// 计算差多少天
      long hour = diff % nd / nh;// 计算差多少小时
      long min = diff % nd % nh / nm;// 计算差多少分钟
      datatime = day + "天" + hour + "小时" + min + "分钟" ;
      datatime = day + "天" + hour + "小时" + min + "分钟";
      return datatime;
   }
   
   public String transferLongToDate(String dateFormat, Long millSec) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(millSec);
        return sdf.format(date);
   /**
    * 通过时间秒毫秒数判断两个时间的间隔
     * @param date1
     * @param date2
     * @return
     */
    public static int differentDaysByMillisecond(Date start, Date end) {
       return (int) ((end.getTime() - start.getTime()) / (1000*3600*24));
    }
   public String transferLongToDate(String dateFormat, Long millSec) {
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      Date date = new Date(millSec);
      return sdf.format(date);
   }
    public static void main(String[] args) {
       long a= 1529044851008L;
       Long l = new Long(a);
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(l);
        System.out.println(sdf.format(date));
       new DateUtil().dateDiff(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()), sdf.format(date));
    }
   /**
    * 验证是否属于同一天
    *
    * @param date1
    * @param date2
    * @return
    */
   public static boolean isSameDay(Date date1, Date date2) {
      if (date1 != null && date2 != null) {
         Calendar cal1 = Calendar.getInstance();
         cal1.setTime(date1);
         Calendar cal2 = Calendar.getInstance();
         cal2.setTime(date2);
         return isSameDay(cal1, cal2);
      } else {
         return false;
      }
   }
   /**
    * 验证是否属于同一天
    *
    * @param cal1
    * @param cal2
    * @return
    */
   public static boolean isSameDay(Calendar cal1, Calendar cal2) {
      if (cal1 != null && cal2 != null) {
         return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6);
      } else {
         return false;
      }
   }
   /**
    * 指定日期加上天数后的日期
    *
    * @param num
    *            增加的天数
    * @param nowDate
    *            创建时间
    * @return
    * @throws ParseException
    */
   public static String plusDay(int num, String nowDate) throws ParseException {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
      Date currdate = format.parse(nowDate);
      Calendar ca = Calendar.getInstance();
      ca.setTime(currdate);
      ca.add(Calendar.DATE, num);
      return format.format(ca.getTime());
   }
   /**
    * 指定日期加上天数后的日期
    *
    * @param num
    *            增加的天数
    * @param nowDate
    *            创建时间
    * @return
    * @throws ParseException
    */
   public static String plusDay(int num, Date currdate) throws ParseException {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
      Calendar ca = Calendar.getInstance();
      ca.setTime(currdate);
      ca.add(Calendar.DATE, num);
      return format.format(ca.getTime());
   }
   /**
    * 指定日期减去天数后的日期
    *
    * @param num
    *            减去的天数
    * @param nowDate
    *            创建时间
    * @return
    * @throws ParseException
    */
   public static String reduceDay(int num, String nowDate) throws ParseException {
      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
      Date currdate = format.parse(nowDate);
      Calendar ca = Calendar.getInstance();
      ca.setTime(currdate);
      ca.add(Calendar.DATE, -num); // 日期减 如果不够减会将月变动
      return format.format(ca.getTime());
   }
     /**
     * 计算两个日期之间相差的天数
     * @param smdate 较小的时间
     * @param bdate  较大的时间
     * @return 相差天数
     * @throws ParseException
     * calendar 对日期进行时间操作
     * getTimeInMillis() 获取日期的毫秒显示形式
     */
    public static int daysBetween(Date smdate,Date bdate) throws ParseException
    {
        Calendar cal = Calendar.getInstance();
        cal.setTime(smdate);
        long time1 = cal.getTimeInMillis();
        cal.setTime(bdate);
        long time2 = cal.getTimeInMillis();
        long between_days=(time2-time1)/(1000*3600*24);
        return Integer.parseInt(String.valueOf(between_days));
    }
    /**
     * 字符串日期格式的计算
     * @param smdate
     * @param bdate
     * @return
     * @throws ParseException
     */
    public static int daysBetween(String smdate,String bdate) throws ParseException{
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(smdate));
        long time1 = cal.getTimeInMillis();
        cal.setTime(sdf.parse(bdate));
        long time2 = cal.getTimeInMillis();
        long between_days=(time2-time1)/(1000*3600*24);
        return Integer.parseInt(String.valueOf(between_days));
    }
   /**
    * 返回中间日期
    * @param startTime
    * @param endTime
    * @return
    * @throws Exception
    */
   public static List<String> dayFactory(String startTime, String endTime) throws Exception {
      List<String> listDate = new ArrayList<String>();
      String plusDay = "";
      for (int i = 0; i < 1000; i++) {
         if (i == 0) {
            plusDay = startTime;
         } else {
            plusDay = DateUtil.plusDay(i, startTime);
         }
         listDate.add(plusDay);
         if (plusDay.equals(endTime)) {
            break; // 时间结束
         }
      }
      return listDate;
   }
   /**
     * @param args
     * @throws ParseException
     * format() 对日期进行格式化处理
     * parse() 将日期设置为date类型
     */
    public static void main(String[] args) throws ParseException {
        // TODO Auto-generated method stub
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d1=sdf.parse("2016-09-08 00:00:00");
        Date d2=sdf.parse("2016-09-08 00:00:00");
        System.out.println(daysBetween(d1,d2));
        System.out.println(daysBetween("2016-09-08 10:10:10","2016-09-29 00:00:00"));
    }
}