时间工具类2

 

  1. 日期模板枚举类PatternEnum
public enum PatternEnum {
    //g  global全称,cn中国
    G_DATE_TIME_DEFAULT("yyyy-MM-dd HH:mm:ss"),// 默认的年月日时分秒格式
    G_DATE_TIME_FOR_CN("yyyy年MM月dd日 HH时mm分ss秒"),// 中文格式
    DATE_FOR_DAY("yyyy-MM-dd"),// 一般的天格式
    DATE_FOR_DAY_CN("yyyy年MM月dd日");
    private PatternEnum(String name){
        this.name=name;
    }
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

编写日期工具类DateUtils

public class DateUtils {

    // 用于存放不同模板的日期
    private static final ThreadLocal<Map<String, SimpleDateFormat>> LOCAL = new ThreadLocal<Map<String, SimpleDateFormat>>() {
        @Override
        protected Map<String, SimpleDateFormat> initialValue() {
            return new HashMap<>();
        }

    };

    /**
     * 返回一个SimpleDateFormat,每个线程只会new一次pattern对应的sdf
     * 
     * @param pattern
     * @return
     */
    private static SimpleDateFormat getSdf(String pattern) {
        Map<String, SimpleDateFormat> map = LOCAL.get();
        SimpleDateFormat sdf = map.get(pattern);
        if (sdf == null) {
            sdf = new SimpleDateFormat(pattern);
            map.put(pattern, sdf);
        }
        return sdf;
    }

    /**
     * 获取当前日期
     * 
     * @param pattern
     * @return
     */
    public static String getNow(PatternEnum pattern) {
        SimpleDateFormat sdf = getSdf(pattern.getName());
        return sdf.format(new Date());
    }

    /**
     * 获取过去一天的日期
     * 
     * @param pattern
     * @return
     */
    public static Date getPastOneDay() {
        Calendar c = Calendar.getInstance();
        c.setTime(new Date());
        c.add(Calendar.DAY_OF_MONTH, -1);
        return c.getTime();
    }

    /**
     * 获取从指定日期起,半个小时以前的日期
     * 
     * @return
     */
    public static Date getPastHalfHour() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        int minute = calendar.get(Calendar.MINUTE);
        calendar.set(Calendar.MINUTE, minute - 30);
        return calendar.getTime();
    }

    /**
     * 获取两个日期之间的天数
     * 
     * @param before
     * @param after
     * @return
     */
    public static long getDistanceTwoDate(Date before, Date after) {
        long beforeTime = before.getTime();
        long afterTime = after.getTime();
        return (afterTime - beforeTime) / (1000 * 60 * 60 * 24);
    }

    /**
     * string转化为指定模板的date
     * 
     * @param str
     * @param pattern
     * @return
     */
    public static Date stringToDate(String str, PatternEnum pattern) {
        try {
            SimpleDateFormat sdf = getSdf(pattern.getName());
            return sdf.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * date类型转化为指定模板的string
     * @param date
     * @param pattern
     * @return
     */
    public static String dateToString(Date date,PatternEnum pattern){
        SimpleDateFormat sdf = getSdf(pattern.getName());
        return sdf.format(date);
    }
    /**
     * 获取某个date的年份
     * @param date
     * @return
     */
    public static int getYear(Date date){
        Calendar c=Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.YEAR);
    }
    /**
     * 获取某个date的月份
     * @param date
     * @return
     */
    public static int getMonth(Date date){
        Calendar c=Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.MONTH)+1;
    }
    /**
     * 获取某个date的day
     * @param date
     * @return
     */
    public static int getDayOfMonth(Date date){
        Calendar c=Calendar.getInstance();
        c.setTime(date);
        return c.get(Calendar.DAY_OF_MONTH);
    }
    /**
     * 判断字符串是否是指定的格式
     * @param date
     * @param pattern
     * @return
     */
     public static boolean isDatePattern(String date, PatternEnum pattern) {  
            SimpleDateFormat sdf = getSdf(pattern.getName());
            try {  
                sdf.setLenient(false);  
                sdf.parse(date);  
                return true;  
            } catch (Exception e) {  
                return false;  
            }  
      }
     /**
      * 获取两个时间的时间差
      * @param before
      * @param after
      * @param flag 0秒,1分,2时,3天
      * @return
      */
     public static int getDifferentNum(Date before,Date after,int flag){
         if(before==null||after==null){
             return 0;
         }
         long timeInterval=after.getTime()-before.getTime();
         switch (flag) {
            case 0:
                return (int) (timeInterval/1000);//
            case 1:
                return (int) (timeInterval/(60*1000));//
            case 2:
                return (int) timeInterval/(60*60*1000);//
            case 3:
                return (int) timeInterval/(60*60*1000*24);//
            }
         return 0;
     }

}

 

posted @ 2023-06-20 14:03  xingmeng1  阅读(11)  评论(0编辑  收藏  举报