Java--处理时间例子

package ins.platform.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;

public class TimeUtil {
    private static Logger logger = Logger.getLogger(TimeUtil.class);
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";//3
    private static final String DATE_FORMAT_DATE = "yyyyMMdd";//12
    private static final String DATE_FORMAT2 = "yyyyMMddHHmmss";//这个方法不要放入dateFormats 他会处理类似于2019-04-04 00格式数据,并处理的时间不对
    private static final String DATE_FORMAT3 = "yyyy-MM-dd HH:mm:ss.SSS z";//1
    private static final String DATE_FORMAT4 = "yyyyMMdd HHmmss";//4
    private static final String DATE_FORMAT5 = "yyyy-MM-dd HHmmss";//5
    private static final String DATE_FORMAT7 = "yyyy-MM-dd HH-mm-ss";//6
    private static final String DATE_FORMAT8 = "yyyy-MM-dd HH:mm";//8
    private static final String DATE_FORMAT9 = "yyyy-MM-dd HH-mm";//9
    private static final String DATE_FORMAT10 = "yyyy-MM-dd HHmm";//7
    private static final String DATE_FORMAT11 = "yyyy-MM-dd HH";//10
    private static final String DATE_FORMAT12 = "yyyy-MM";//13
    private static final String DATE_FORMAT_MILLISECOND = "yyyy-MM-dd HH:mm:ss.SSS";//2
    private static final String DATE_YEAR = "yyyy";//15
    private static final String DATE_MONTH = "MM";//16
    private static final String DATE_DAY = "dd";//17
    private static final String DATE_TIME = "HH:mm:ss";//14
    private static final String DATE_DATE = "yyyy-MM-dd";//11
    private static final String DATE_DATE_D = "yyyyMMdd";
    
    
    static List<DateFormat> dateFormats = null;
    static {
        dateFormats = new ArrayList<>();
        //按照时间格式从复杂维度到简单维度放入 --如果有特殊格式,只需要添加就可以了
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT3));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT_MILLISECOND));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT4));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT5));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT7));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT10));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT8));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT9));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT11));
        dateFormats.add(new SimpleDateFormat(DATE_DATE));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT_MILLISECOND));
        dateFormats.add(new SimpleDateFormat(DATE_FORMAT12));
        dateFormats.add(new SimpleDateFormat(DATE_TIME));
        dateFormats.add(new SimpleDateFormat(DATE_YEAR));
        dateFormats.add(new SimpleDateFormat(DATE_MONTH));
        dateFormats.add(new SimpleDateFormat(DATE_DAY));
    }
    
    //字符串转日期格式
    public static Date formatStr(String dateStr) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_MILLISECOND);
        Date date = null;
        try {
            date = sdf.parse(dateStr);
        } catch (ParseException e) {
            sdf = new SimpleDateFormat(DATE_FORMAT);
            try {
                date = sdf.parse(dateStr);
            } catch (ParseException e1) {
                sdf = new SimpleDateFormat(DATE_FORMAT8);
                try {
                    date = sdf.parse(dateStr);
                } catch (ParseException e2) {
                    sdf = new SimpleDateFormat(DATE_FORMAT11);
                    try {
                        date = sdf.parse(dateStr);
                    } catch (ParseException e3) {
                        sdf = new SimpleDateFormat(DATE_DATE);
                        try {
                            date = sdf.parse(dateStr);
                        } catch (ParseException e4) {
                            logger.error("日期转换异常",e4);
                        }
                    }
                }
            }
        }
        return date;
    }
    
    public enum TimeEnum {
        // yyyy-MM-dd HH:mm:ss
        YEAR("yyyy", "年份"), MM("yyyy-MM", "年月"), dd("yyyy-MM-dd", "年月日"), HH(
                "yyyy-MM-dd HH", "年月日 时"), mm("yyyy-MM-dd HH:mm", "年月日 时分"),ss("yyyy-MM-dd HH:mm:ss", "年月日 时分秒");

        private String code;

        private String name;

        TimeEnum(String code,String name) {

            this.name = name;

            this.code = code;

        }
        public String getName() {
            return name;
        }

        public String getCode() {
            return code;
        }

    }
    
    /**
     * 
     * @param dateStr 需要转换的时间字符串
     * @param timeEnum 时间格式的枚举
     * @return
     * @throws ParseException
     */
    public static Date formatStrToDate(String dateStr,TimeEnum timeEnum) throws ParseException {
        Date date = null;
        if(dateStr == null || "".equals(dateStr) || "".equals(dateStr.trim())){
            return null;
        }
        if(timeEnum !=null){
            //按照定制的初始化
            SimpleDateFormat sdf = new SimpleDateFormat(timeEnum.code);
            date = sdf.parse(dateStr);
        }else{
            String[] dateArr = dateStr.split(" ");
            if(dateArr == null){
                return null;
            }
            String pattern = "";
            if(dateArr.length == 1){
                //yyyy-MM-dd
                String str = dateArr[0];
                if(str.length() == 4){
                    pattern = TimeEnum.YEAR.code;
                }
                if(str.length() == 7){
                    pattern = TimeEnum.MM.code;
                }
                if(str.length() == 10){
                    pattern = TimeEnum.dd.code;
                }
            }else if(dateArr.length == 2){
                //yyyy-MM-dd 
                //HH:mm:ss
                String str = dateArr[1];
                if(str.length() == 2){
                    pattern = TimeEnum.HH.code;
                }
                if(str.length() == 5){
                    pattern = TimeEnum.mm.code;
                }
                if(str.length() == 8){
                    pattern = TimeEnum.ss.code;
                }
            }
            if(!"".equals(pattern)){
                SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                date = sdf.parse(dateStr);
            }
        }
        return date;
    }
}

猜你喜欢

转载自www.cnblogs.com/llq1214/p/11301809.html