Java日期格式转换工具类

此文章转载于福建开源社区http://www.fjkysq.com

Java中util包下有很多的工具类及方法,但往往有很多并能直接用到业务中,我们需要在这些工具上进行一些加工,比如日期格式,以下带有Main方法,可以自行调试,然后加上注释,以便以后使用。

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateUtils {

    private static ThreadLocal<SimpleDateFormat> dates = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat("MM,dd,HH,mm");
        }
    };

    public static String [] getMonthDateHourMinute(Date date){
        String [] tmp = dates.get().format(date).split(",");
        return tmp;
    }

    private static ThreadLocal<SimpleDateFormat> dateAlls = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat("MM,dd,HH,mm,ss");
        }
    };


    public static synchronized int days(int month){
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.MONTH, month - 1);
        return cal.getActualMaximum(Calendar.DATE);
    }


    public static int [] getMonthDateHourMinuteSecond(Date date){
        String [] tmp = dateAlls.get().format(date).split(",");
        int [] result = new int[tmp.length];
        for(int i = 0; i < tmp.length; i++){
            result[i] = Integer.parseInt(tmp[i]);
        }
        return result;
    }

    private static ThreadLocal<SimpleDateFormat> simpleDateFormats = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(DateFormat.YYYYMMDD.getFormat());
        }
    };


    private static ThreadLocal<SimpleDateFormat> dateFormats = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(DateFormat.YYYY_MM_DD.getFormat());
        }
    };

    private static ThreadLocal<SimpleDateFormat> dateTimeHourFormats = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(DateFormat.YYYY_MM_DD_HH.getFormat());
        }
    };

    private static ThreadLocal<SimpleDateFormat> dateTimeWithoutSecondFormats = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(DateFormat.YYYY_MM_DD_HH_MM.getFormat());
        }
    };

    private static ThreadLocal<SimpleDateFormat> simpleDateTimeFormats = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(DateFormat.YYYYMMDDHHMMSS.getFormat());
        }
    };

    private static ThreadLocal<SimpleDateFormat> dateTimeFormats = new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat(DateFormat.YYYY_MM_DD_HH_MM_SS.getFormat());
        }
    };


    private static Map<Pattern, ThreadLocal<SimpleDateFormat>> threadLocalMap = new HashMap<Pattern, ThreadLocal<SimpleDateFormat>>();

    static {
        threadLocalMap.put(Pattern.compile("^[\\d]{8}$"), simpleDateFormats);//DateFormat.YYYYMMDD
        threadLocalMap.put(Pattern.compile("^[\\d]{14}$"), simpleDateTimeFormats);//DateFormat.YYYYMMDDMMHHSS
        threadLocalMap.put(Pattern.compile("^[\\d]{4}-[\\d]{2}-[\\d]{2}$"), dateFormats);
        threadLocalMap.put(Pattern.compile("^[\\d]{4}-[\\d]{2}-[\\d]{2}[\\s]{1}[\\d]{2}$"), dateTimeHourFormats);
        threadLocalMap.put(Pattern.compile("^[\\d]{4}-[\\d]{2}-[\\d]{2}[\\s]{1}[\\d]{2}[:][\\d]{2}$"), dateTimeWithoutSecondFormats);
        threadLocalMap.put(Pattern.compile("^[\\d]{4}-[\\d]{2}-[\\d]{2}[\\s]{1}[\\d]{2}[:][\\d]{2}[:][\\d]{2}$"), dateTimeFormats);
    }

    public static void main(String[] args) {
        System.out.println(getDate("2013-03-01 22:01:03"));

        Date date = new Date();
        System.out.println(DateUtils.formatYYYY_MM_DD(date));
        System.out.println(DateUtils.formatYYYY_MM_DD_HH(date));
        System.out.println(DateUtils.formatYYYY_MM_DD_HH_MM(date));
        System.out.println(DateUtils.formatYYYY_MM_DD_HH_MM_SS(date));
        System.out.println(DateUtils.formatYYYYMMDD(date));
        System.out.println(DateUtils.formatYYYYMMDDHHMMSS(date));

        System.out.println(parseYYYY_MM_DD(DateUtils.formatYYYY_MM_DD(date)));
        System.out.println(parseYYYY_MM_DD_HH(DateUtils.formatYYYY_MM_DD_HH(date)));
        System.out.println(parseYYYY_MM_DD_HH_MM(DateUtils.formatYYYY_MM_DD_HH_MM(date)));
        System.out.println(parseYYYY_MM_DD_HH_MM_SS(DateUtils.formatYYYY_MM_DD_HH_MM_SS(date)));
        System.out.println(parseYYYYMMDD(DateUtils.formatYYYYMMDD(date)));
        System.out.println(parseYYYYMMDDHHMMSS(DateUtils.formatYYYYMMDDHHMMSS(date)));

        System.out.println(DateUtils.getSimpleDateTime());
    }


    public static Date getDate(String date) {
        try {
            for (Pattern pattern : threadLocalMap.keySet()) {
                Matcher matcher = pattern.matcher(date);
                if (matcher != null && matcher.find()) {
                    ThreadLocal<SimpleDateFormat> threadLocal = threadLocalMap.get(pattern);
                    return threadLocal.get().parse(date);
                }
            }
        } catch (ParseException e){
            throw new RuntimeException(e);
        }
        if(date != null && !"".equals(date)){
            throw new RuntimeException("date.format.error");
        }
        return null;
    }

    private static Pattern normalPattern = Pattern.compile("^[\\d]{4}-[\\d]{2}-[\\d]{2}$");

    public static Date getDate(String date, String name) {
        try {
            Matcher matcher = normalPattern.matcher(date);
            if (matcher != null && matcher.find()) {
                if(name != null && name.startsWith("end")) {
                    date += " 23:59:59";
                    return dateTimeFormats.get().parse(date);
                }
                return dateFormats.get().parse(date);
            }
            for (Pattern pattern : threadLocalMap.keySet()) {
                matcher = pattern.matcher(date);
                if (matcher != null && matcher.find()) {
                    ThreadLocal<SimpleDateFormat> threadLocal = threadLocalMap.get(pattern);
                    return threadLocal.get().parse(date);
                }
            }
        } catch (ParseException e){
            throw new RuntimeException(e);
        }
        if(date != null && !"".equals(date)){
            throw new RuntimeException("date.format.error");
        }
        return null;
    }


    public static String getDateTimeWithoutSecond(Timestamp timestamp){
        SimpleDateFormat sdf = dateTimeWithoutSecondFormats.get();
        return sdf.format(new Date(timestamp.getTime()));
    }

    public static Date parseDateTimeWithoutSecond(String date){
        SimpleDateFormat sdf = dateTimeWithoutSecondFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }

    public static String getDateTimeWithoutSecond(Date date){
        SimpleDateFormat sdf = dateTimeWithoutSecondFormats.get();
        return sdf.format(date);
    }

    public static String getDate(Date date){
        SimpleDateFormat sdf = dateFormats.get();
        return sdf.format(date);
    }

    public static String currentDate(){
        return dateTimeFormats.get().format(new Date());
    }



    /**
     * yyyyMMdd
     * @param date
     * @return
     */
    public static String getSimpleDate(Date date){
        SimpleDateFormat sdf = simpleDateFormats.get();
        return sdf.format(date);
    }

    public static String getSimpleDateTime(){
        SimpleDateFormat sdf = simpleDateTimeFormats.get();
        return sdf.format(new Date());
    }

    public static String getSimpleDateTime(Date date){
        SimpleDateFormat sdf = simpleDateTimeFormats.get();
        return sdf.format(date);
    }

    public static Date parseDate(String date){
        SimpleDateFormat sdf = dateFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    public static String getDateTime(Date date){
        SimpleDateFormat sdf = dateTimeFormats.get();
        return sdf.format(date);
    }

    public static Date parseDateTime(String date){
        SimpleDateFormat sdf = dateTimeFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static String formatYYYYMMDD(Date date){
        SimpleDateFormat sdf = simpleDateFormats.get();
        return sdf.format(date);
    }

    public static Date parseYYYYMMDD(String date){
        SimpleDateFormat sdf = simpleDateFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String formatYYYYMMDDHHMMSS(Date date){
        SimpleDateFormat sdf = simpleDateTimeFormats.get();
        return sdf.format(date);
    }

    public static Date parseYYYYMMDDHHMMSS(String date){
        SimpleDateFormat sdf = simpleDateTimeFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String formatYYYY_MM_DD(Date date){
        SimpleDateFormat sdf = dateFormats.get();
        return sdf.format(date);
    }

    public static Date parseYYYY_MM_DD(String date){
        SimpleDateFormat sdf = dateFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String formatYYYY_MM_DD_HH(Date date){
        SimpleDateFormat sdf = dateTimeHourFormats.get();
        return sdf.format(date);
    }

    public static Date parseYYYY_MM_DD_HH(String date){
        SimpleDateFormat sdf = dateTimeHourFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String formatYYYY_MM_DD_HH_MM(Date date){
        SimpleDateFormat sdf = dateTimeWithoutSecondFormats.get();
        return sdf.format(date);
    }

    public static Date parseYYYY_MM_DD_HH_MM(String date){
        SimpleDateFormat sdf = dateTimeWithoutSecondFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String formatYYYY_MM_DD_HH_MM_SS(Date date){
        SimpleDateFormat sdf = dateTimeFormats.get();
        return sdf.format(date);
    }

    public static Date parseYYYY_MM_DD_HH_MM_SS(String date){
        SimpleDateFormat sdf = dateTimeFormats.get();
        try {
            return sdf.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    //计算多少天后的corn表达式,计时器处使用
    public static String formatDateByPattern(Date date,String dateFormat){
        SimpleDateFormat sdf =new SimpleDateFormat(dateFormat);
        String formaTimeStr = null ;
        if(date != null){
            formaTimeStr = sdf.format(date);
        }
        return formaTimeStr;
    }

    public static String getCron(Date date){
        String dateFormat = "ss mm HH dd MM ? yyyy";
        return formatDateByPattern(date,dateFormat);
    }

    public static Date getCurrentBeforeNum(int num,Date date){
      Calendar cal = Calendar.getInstance();
      cal.setTime(date);
      cal.add(Calendar.DATE,num);
      return cal.getTime();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值