登录 后使用快捷导航
没有帐号?立即注册

IT撸码课程网

用户名   找回密码
  立即注册
发新帖

分享一个日期工具类

[复制链接]
100 162 100
发表于2019-01-16 16:08:54 | 只看楼主 | 阅读模式
上一主题 下一主题
登录后查看本帖详细内容!您需要登录后才可以下载 登录 | 立即注册


撸码网-分享一个日期工具类


我们经常要用日期的前多少天,后多少天、获取当前月份数、获取指定天数后的日期、取今天之前的日期列表,不包括今天的、获取本月1号0点0分0秒、获取下月月份、在提供的date的基础上添加days,返回格式为yyyy-MM-dd、格式化Date时间、比较两个日期的时间差等等


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 日期工具类
 * 
 * @author CTO 2018年4月13日
 */
public class DateUtils {
   private final static Logger logger = LoggerFactory.getLogger(DateUtils.class);
   private final static SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   private final static SimpleDateFormat f1 = new SimpleDateFormat("yyyy-MM-dd");
   private final static SimpleDateFormat f2 = new SimpleDateFormat("yyyy-MM");
   private final static SimpleDateFormat f3 = new SimpleDateFormat("MM/dd");
   private final static SimpleDateFormat f4 = new SimpleDateFormat("yyyyMMdd");

   /**
    * 获得日期cont天前最造的时间 2018-05-11 00:00:00
    * 
    * @param nowDate
    * @return
    */
   public static Date getIntDateFastTemp(Date nowDate, int cont) {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(nowDate);
      calendar.add(Calendar.DATE, cont * -1);
      calendar.set(Calendar.HOUR_OF_DAY, 0);
      calendar.set(Calendar.MINUTE, 0);
      calendar.set(Calendar.SECOND, 0);
      calendar.set(Calendar.MILLISECOND, 0);
      return calendar.getTime();
   }

   public static long getDaysByDate(Date beginDate, Date endDate) {
      return (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000);
   }

   /**
    * 获得日期昨天最晚的时间 2018-05-11 23:59:59
    * 
    * @param nowDate
    * @return
    */
   public static Date getDateLatestTemp(Date nowDate) {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(nowDate);
      calendar.add(Calendar.DATE, -1);
      calendar.set(Calendar.HOUR_OF_DAY, 23);
      calendar.set(Calendar.MINUTE, 59);
      calendar.set(Calendar.SECOND, 59);
      calendar.set(Calendar.MILLISECOND, 0);
      return calendar.getTime();
   }

   public static String getDateLatestTime(Date nowDate) {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(nowDate);
      calendar.set(Calendar.HOUR_OF_DAY, 23);
      calendar.set(Calendar.MINUTE, 59);
      calendar.set(Calendar.SECOND, 59);
      calendar.set(Calendar.MILLISECOND, 0);
      return f.format(calendar.getTime());
   }

   /**
    * 获得日期中通天最早的时间 2018-05-11 00:00:00
    * 
    * @param nowDate
    * @return
    */
   public static Date getDateFirstsTemp(Date nowDate) {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(nowDate);
      calendar.add(Calendar.DATE, -1);
      calendar.set(Calendar.HOUR_OF_DAY, 0);
      calendar.set(Calendar.MINUTE, 0);
      calendar.set(Calendar.SECOND, 0);
      calendar.set(Calendar.MILLISECOND, 0);
      return calendar.getTime();
   }

   public static String date2Str(Date date) {
      return f.format(date);
   }

   public static String date2StrRq(Date date) {
      return f1.format(date);
   }

   public static String datasStrYM(Date date) {
      return f2.format(date);
   }

   public static String datasStrMD(Date date) {
      return f3.format(date);
   }
   
   public static Integer date2IntegerRq(Date date) {
        return Integer.valueOf(f4.format(date));
    }

   public static Date getYesterday() {
      Date date = new Date();
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(date);
      calendar.add(Calendar.DAY_OF_MONTH, -1);
      date = calendar.getTime();
      return date;
   }

   public static Long getLongTime(String time) {
      Integer year = Integer.valueOf(time.split("-")[0]);
      Integer month = Integer.valueOf(time.split("-")[1]);
      Integer day = Integer.valueOf(time.split("-")[2]);
      Calendar start = Calendar.getInstance();
      start.set(year, month - 1, day);
      Long longTime = start.getTimeInMillis();
      return longTime;
   }

   /**
    * 获取当前月份数
    * 
    * @return
    */
   public static Integer getMonth() {
      Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));
      return calendar.get(Calendar.MONTH) + 1;
   }

   /**
    * 获取指定天数后的日期
    * 
    * @param nowDate
    * @param cont
    * @return
    */
   public static Date getDateFutuerTemp(Date nowDate, int cont) {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(nowDate);
      calendar.add(Calendar.DATE, cont);
      return calendar.getTime();
   }

   /**
    * 取今天之前的日期列表,不包括今天的
    * 
    * @param days
    * @return
    */
   public static List<String> getBeforeDateList(int days) {
      List<String> dateList = new ArrayList<>();
      Date now = new Date();
      for (; days > 0; days--) {
         dateList.add(DateUtils.date2StrRq(DateUtils.getIntDateFastTemp(now, days)));
      }
      return dateList;
   }

   public static String getDateFutuerTemp2(Date nowDate, int cont) {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(nowDate);
      calendar.add(Calendar.DATE, cont);
      return f1.format(calendar.getTime());
   }

   public static Long getSecondsNextEarlyMorning() {
      Calendar cal = Calendar.getInstance();
      cal.add(Calendar.DAY_OF_YEAR, 1);
      cal.set(Calendar.HOUR_OF_DAY, 0);
      cal.set(Calendar.SECOND, 0);
      cal.set(Calendar.MINUTE, 0);
      cal.set(Calendar.MILLISECOND, 0);
      return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
   }

   /**
    * 获取本月1号0点0分0秒
    * 
    * @return
    */
   public static String getInitDateByMonth() {
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(new Date());
      calendar.set(Calendar.DAY_OF_MONTH, 1);
      calendar.set(Calendar.HOUR_OF_DAY, 0);
      calendar.set(Calendar.MINUTE, 0);
      calendar.set(Calendar.SECOND, 0);
      return date2StrRq(calendar.getTime());
   }

   /**
    * 获取下月月份
    * 
    * @return
    */
   public static String getPreMonth() {
      Calendar cal = Calendar.getInstance();
      cal.setTime(new Date());
      cal.add(Calendar.MONTH, 1);
      SimpleDateFormat dft = new SimpleDateFormat("MM");
      String preMonth = dft.format(cal.getTime());
      return preMonth;
   }

   /**
    * 在提供的date的基础上添加days,返回格式为yyyy-MM-dd
    * 
    * @param date
    * @param days
    * @return
    * @throws ParseException
    */
   public static String addDays(Date date, int days) {
      return addDays(date, days, "yyyy-MM-dd");
   }

   public static String addDays(Date date, int days, String dateFromat) {
      try {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
         calendar.add(Calendar.DATE, days);
         return parseDateToStr(calendar.getTime(), dateFromat);
      } catch (Exception e) {
         logger.error("addDays ParseException error :", e.getMessage(), e);
      }
      return null;
   }

   /**
    * 格式化Date时间
    * 
    * @param time
    *            Date类型时间
    * @param timeFromat
    *            String类型格式
    * @return 格式化后的字符串
    */
   public static String parseDateToStr(Date time, String timeFromat) {
      return new SimpleDateFormat(timeFromat).format(time);
   }

   public static long getDateTimestamp() {
      Calendar calendar = Calendar.getInstance();
      Date nowDate = new Date();
      calendar.setTime(nowDate);
      calendar.set(Calendar.HOUR_OF_DAY, 23);
      calendar.set(Calendar.MINUTE, 59);
      calendar.set(Calendar.SECOND, 59);
      calendar.set(Calendar.MILLISECOND, 0);
      return calendar.getTime().getTime() - nowDate.getTime();
   }
  

   /**
    * 比较两个日期的时间差
    * 
    * @param date1
    * @param date2
    * @return
    */
   public static int differentDays(Date date1, Date date2) {
      Calendar cal1 = Calendar.getInstance();
      cal1.setTime(date1);

      Calendar cal2 = Calendar.getInstance();
      cal2.setTime(date2);
      int day1 = cal1.get(Calendar.DAY_OF_YEAR);
      int day2 = cal2.get(Calendar.DAY_OF_YEAR);

      int year1 = cal1.get(Calendar.YEAR);
      int year2 = cal2.get(Calendar.YEAR);
      // 同一年
      if (year1 != year2) {
         int timeDistance = 0;
         for (int i = year1; i < year2; i++) {
            // 闰年
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
               timeDistance += 366;
            } else // 不是闰年
            {
               timeDistance += 365;
            }
         }
         return timeDistance + (day2 - day1);
      } else // 不同年
      {
         // System.out.println("判断day2 - day1 : " + (day2-day1));
         return day2 - day1;
      }
   }
   
}

   /*public static void main(String[] args) throws ParseException {
      System.out.println(date2Str(getIntDateFastTemp(new Date(), 7)));
      System.out.println(date2StrRq(new Date()));
      System.out.println(date2Str(getDateFutuerTemp(new Date(), 0)));
      System.out.println(getSecondsNextEarlyMorning());
      System.out.println(getInitDateByMonth());
      System.out.println(getDateLatestTime(new Date()));
      System.out.println(date2IntegerRq(new Date()));
   }*/
   
  比如前15天的日期
  String dt = DateUtils.getDateFutuerTemp2(new Date(), -15);


IT撸码网 - 必读申明1、本站会员可发帖,本主题所有言论和图片纯属会员个人意见,与本论坛立场无关.
2、本站所有帖子由该帖子作者发表,该帖子作者享有帖子相关权益.
3、本帖内容来网友及会员分享和其它网络媒体.
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意!
5、若因内容问题IT撸码网管理员和版主有权不事先通知发贴者而删除本文.
6、本站课程仅供本站会员学习参考,不得传播及用于其他用途,学习完后请在24小时内自行删除.
7、本站资源质量虽均经精心审查,但也难保万无一失,若发现资源有问题影响学习请一定及时点此进行问题反馈,我们会积极为您解决问题!
8、若发现链接失效了点此进行链接失效反馈,我们会第一时间修复链接.

精彩评论0

您需要登录后才可以发帖查看详细内容! 登录 | 立即注册
*
 

本版积分规则