日期的格式转换问题工具类DateUtil一站式大汇总

package com.cloud.monitor.Util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {
    /**
     * yyyy-MM-dd
     */
    public static SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
    /**
     * yyyy-MM-dd HH:mm:ss
     */
    public static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    /**
     * yyyyMMddHHmmss
     */
    public static SimpleDateFormat compact_formatter = new SimpleDateFormat("yyyyMMddHHmmss");

    /**
     * 获得当前的日期 格式:yyyy-MM-dd
     */
    public static String getToday() {
        Calendar cal = Calendar.getInstance();
        synchronized (ft) {
            return ft.format(cal.getTime());
        }
    }

    /**
     * 获得当前时间 格式:yyyy-MM-dd HH:mm:ss
     */
    public static String getCurrentTime() {
        Calendar cal = Calendar.getInstance();
        synchronized (formatter) {
            return formatter.format(cal.getTime());
        }
    }

    /**
     * 将给定格式的时间字符串格式化为:yyyy-MM-dd 例:2013-1-1经格式化后为:2013-01-01
     * 
     * @param str
     *            格式:yyyy-M-d
     * @return 格式:yyyy-MM-dd
     */
    public static String formatDate(String str) {
        try {
            synchronized (ft) {
                return ft.format(ft.parse(str));
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将给定格式的时间字符串格式化 <br>
     * 例:2013-1-1 1:1:0 经格式化后为:2013-01-01 01:01:00 <br>
     * 2013-1-1 经格式化后为:2013-01-01 <br>
     * 20130101 经格式化后为:2013-01-01
     * 
     * @param str
     *            可接受格式:yyyy-M-d H:m:s || yyyy-M-d || yyyyMMdd
     * @return 标准格式:yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy-MM-dd
     */
    public static synchronized String format(String str) {
        if (str == null) {
            return null;
        }
        try {
            if (str.contains(":")) {
                return formatter.format(formatter.parse(str));
            } else if (str.contains("-")) {
                return ft.format(ft.parse(str));
            } else if (str.length() == 8) {
                String date = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
                return date;
            } else if (str.length() == 14) {
                return formatRestfulDate(str);
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将给定格式的时间字符串格式化 <br>
     * 例:2013-12-1 13:14:0 经格式化后为:20131201131400
     * 
     * @param str
     *            可接受格式:yyyy-M-d H:m:s
     * @return 标准格式:yyyyMMddHHmmss
     */
    public static synchronized String getCompactDatetime(String str) {
        try {
            return compact_formatter.format(formatter.parse(str));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 指定时间指定分钟偏移量后的时间
     * 
     * @param str
     *            格式:yyyy-MM-dd HH:mm:ss
     * @param add
     *            分钟偏移量,正数向后,负数向后
     * @return 格式:yyyy-MM-dd HH:mm:ss
     */
    public static synchronized String addMinutes(String str, int add) {
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(formatter.parse(str));
            cal.add(Calendar.MINUTE, add);
            return formatter.format(cal.getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 指定时间指定小时偏移量后的时间
     * 
     * @param str
     *            格式:yyyy-MM-dd HH:mm:ss
     * @param add
     *            分钟偏移量,正数向后,负数向后
     * @return 格式:yyyy-MM-dd HH:mm:ss
     */
    public static synchronized String addHour(String str, int add) {
        try {
            Calendar cal = Calendar.getInstance();
            cal.setTime(formatter.parse(str));
            cal.add(Calendar.HOUR, add);
            return formatter.format(cal.getTime());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 
     * @param year
     * @param month
     * @param day
     * @param hour
     * @param minute
     * @param second
     * @return stepdate
     */
    public static String getStepdate(int year, int month, int day) {
        try {
            if (year < 100) {
                year += 2000;
            }
            String date = year + "-" + month + "-" + day;
            date = DateUtil.format(date);
            // The Same Day' data
            if (date.equals(DateUtil.getToday())) {
                Calendar cal = Calendar.getInstance();
                synchronized (compact_formatter) {
                    return compact_formatter.format(cal.getTime());
                }
            } else {
                date = date.replace("-", "");
                return date + "235959";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 获取简要包数据时间,若不是今天则默认为23点59分59秒
     * 
     * @param date
     *            yyyy-MM-dd
     * @return stepdate
     */
    public static String getStepdate(String date) {
        try {
            date = formatDate(date);
            // The Same Day' data
            if (date.equals(getToday())) {
                Calendar cal = Calendar.getInstance();
                synchronized (compact_formatter) {
                    return compact_formatter.format(cal.getTime());
                }
            } else {
                date = date.replace("-", "");
                return date + "235959";
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将给定的数字年、月、日格式化为 YYYY-MM-DD
     * 
     * @param year
     * @param month
     * @param day
     * @return
     */
    public static String getDate(int year, int month, int day) {
        Calendar cal = Calendar.getInstance();
        if (year < 100)
            year = year + 2000;
        cal.set(year, month - 1, day);
        synchronized (ft) {
            return ft.format(cal.getTime());
        }
    }

    public static Date getDate(String str) {
        try {
            synchronized (ft) {
                return ft.parse(str);
            }
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String getTime(int hour, int minute) {
        StringBuffer sb = new StringBuffer();
        if (hour < 10) {
            sb.append("0");
        }
        sb.append(hour).append(":");
        if (minute < 10) {
            sb.append("0");
        }
        sb.append(minute);
        return sb.toString();
    }

    /**
     * 用于格式化restful协议中的时间传输格式的解析
     * 
     * @param date
     *            yyyyMMddHHmmss
     * @return 符合规范则返回 yyyy-MM-dd HH:mm:ss 类型数据,不符合规范的不做处理
     */
    public static String formatRestfulDate(String date) {
        // 判断时间是否为空,长度是否满足解析要求
        if (null != date && date.length() == 14) {
            StringBuffer sb = new StringBuffer();
            sb.append(date.substring(0, 4)).append('-').append(date.substring(4, 6)).append('-')
                    .append(date.substring(6, 8)).append(' ').append(date.substring(8, 10)).append(':')
                    .append(date.substring(10, 12)).append(':').append(date.substring(12, 14));
            return sb.toString();
        }
        return date;
    }

    /**
     * 获得指定格式的日期的指定偏移量后的日期
     * 
     * @param dateString
     *            格式:yyyy-MM-dd
     * @param num
     *            偏移量 正数代表向后偏移,负数向前偏移
     * @return 格式:yyyy-MM-dd
     */
    public static synchronized String getDayAdd(String dateString, int num) {
        Calendar cal = Calendar.getInstance();
        try {
            cal.setTime(ft.parse(dateString));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        cal.add(Calendar.DAY_OF_MONTH, num);
        return ft.format(cal.getTime());
    }

    /**
     * 将给定格式的时间字符串转换为Calendar对象
     * 
     * @param currentTime
     *            yyyy-MM-dd HH:mm:ss
     * @return
     */
    public static synchronized Calendar getCalendar(String currentTime) {
        Calendar cal = Calendar.getInstance();
        try {
            cal.setTime(formatter.parse(currentTime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return cal;
    }

    /**
     * 测试方法
     * 
     * @throws Exception
     */
    public static void main(String[] args) {
        System.out.println(getToday());
        System.out.println(getCurrentTime());
        System.out.println(format("2013-1-1 1:1:0"));
        System.out.println(format("20131101"));
        System.out.println(getStepdate(13, 9, 11));
        System.out.println(getCompactDatetime("2013-12-1 13:14:0"));
    }
}
 

猜你喜欢

转载自blog.csdn.net/Peter_Changyb/article/details/81564262