java常用工具类之日期工具类

日期工具类

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;


public class AegisDateUtils {
    /**
     * 预定的日期格式
     */
    public static final String[] DATEFORMAT = {"yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss", "yyyy年MM月dd日HH时mm分ss秒", "yyyy-MM-dd", "yyyy/MM/dd", "yy-MM-dd", "yy/MM/dd", "yyyy年MM月dd日", "HH:mm:ss",
            "yyyyMMddHHmmss", "yyyyMMdd", "yyyy.MM.dd", "yy.MM.dd", "yyyyMMddHHmmssSSS", "yyyy-MM-dd HH:mm:ss:SSS", "yyyy-MM-dd HH:mm:ss.SSS", "yyyy", "yyyyMM", "yyyyMMdd HH", "yyyyMMdd HH:mm",
            "yyyyMMdd HH:mm:ss", "yyyy-MM" };

    /**
     * 线程绑定的日期格式转换器缓存
     */
    private static final ThreadLocal<Map<String, SimpleDateFormat>> DATEFORMATERSCACHE = new ThreadLocal<Map<String, SimpleDateFormat>>();

    /**
     * 获取当前系统时间
     */
    public static Calendar getSystemCurrentTime() {
        final Calendar currentTime = Calendar.getInstance();
        return currentTime;
    }

    /**
     * 获取当前系统时间
     */
    public static String getSystemCurrentTime(int format) {
        return toDateStrByFormatIndex(getSystemCurrentTime(), format);
    }

    /**
     * 获取系统当前date类型时间
     */
    public static Date getCurrentDate() {
        return new Date();
    }

    /**
     * 获取系统当前日期和时间,格式为yyyy-MM-dd HH:mm:ss
     */
    public static String getCurrentDateTime() {
        return getFormatCurrentDate("yyyy-MM-dd HH:mm:ss");
    }

    /**
     * 返回格式化的当前日期/时间
     */
    public static String getFormatCurrentDate(String strFormat) {
        return msFormatDateTime(getCurrentDate(), strFormat);
    }

    /**
     * 日期/时间格式化显示(年、月、日、时、分、秒、毫秒、星期)
     */
    public static String msFormatDateTime(Date dtmDate, String strFormat) {

        if (strFormat.equals("")) {
            strFormat = "yyyy-MM-dd HH:mm:ss";
        }

        final SimpleDateFormat myFormat = new SimpleDateFormat(strFormat);

        return myFormat.format(dtmDate.getTime());
    }

    /**
     * 日期/时间格式化显示(年、月、日)
     */
    public static String msFormatDate(Date dtmDate, String strFormat) {

        if (strFormat.equals("")) {
            strFormat = "yyyy-MM-dd";
        }

        final SimpleDateFormat myFormat = new SimpleDateFormat(strFormat);

        return myFormat.format(dtmDate.getTime());
    }

    /**
     * 获取当前系统时间
     */
    public static String getSystemCurrentTime(String format) {
        return toDateStrByFormat(getSystemCurrentTime(), format);
    }

    // ======================日期转字符串基础格式化方法======================================================================================

    /**
     * @name 中文名称
     */
    private static SimpleDateFormat getDateFormater(String format) {
        Map<String, SimpleDateFormat> dateFormaters = DATEFORMATERSCACHE.get();
        SimpleDateFormat dateFormater = null;
        boolean formatersIsNull = false;

        if (dateFormaters == null) {
            dateFormaters = new HashMap<String, SimpleDateFormat>(3, 0.2f);
            DATEFORMATERSCACHE.set(dateFormaters);
            formatersIsNull = true;
        }
        dateFormater = dateFormaters.get(format);
        if (formatersIsNull || dateFormater == null) {
            dateFormater = new SimpleDateFormat(format);
            dateFormaters.put(format, dateFormater);
        }

        return dateFormater;
    }

   
    private static SimpleDateFormat getDateFormater(int format) {
        return getDateFormater(DATEFORMAT[format]);
    }

    // ======================日期转字符串基础方法======================================================================================

    /**
     *
     * Calendar日期转指定日期格式的字符串
     */
    public static String toDateStrByFormat(Calendar date, String format) {
        if (date == null) {
            return null;
        }
        return getDateFormater(format).format(date.getTime());
    }

    /**
     *
     * Calendar日期转指定日期格式的字符串
     */
    public static String toDateStrByFormatIndex(Calendar date, int format) {
        return toDateStrByFormat(date, DATEFORMAT[format]);
    }

    /**
     * java.util.Date日期转指定日期格式的字符串
     */
    public static String toDateStrByFormat(Date date, String format) {
        if (date == null) {
            return null;
        }
        return getDateFormater(format).format(date.getTime());
    }

    /**
     * java.util.Date日期转指定格式的字符串
     */
    public static String toDateStrByFormatIndex(Date date, int format) {
        return toDateStrByFormat(date, DATEFORMAT[format]);
    }

    // ======================日期转字符串方法======================================================================================

    /**
     * Calendar日期转日期字符串
     */
    public static String toDateTimeStr(Calendar date) {
        return toDateStrByFormatIndex(date, 0);
    }

    /**
     * Calendar日期转指定日期格式的字符串
     */
    public static String toDateTimeStr(int format, Calendar date) {
        return toDateStrByFormatIndex(date, format);
    }

    /**
     * Calendar日期转日期字符串
     */
    public static String toDateStr(Calendar date) {
        return toDateStrByFormatIndex(date, 3);
    }

    /**
     * java.util.Date日期转指定格式的日期字符串
     */
    public static String dateToString(Date date, int format) {
        return toDateStrByFormatIndex(date, format);
    }

    /**
     * java.util.Date日期转日期字符串
     */
    public static String dateToString(Date date) {
        return toDateStrByFormatIndex(date, 3);
    }

    // ======================xx转Date方法======================================================================================

    /**
     * Calendar日期转java.util.Date日期
     */
    public static Date convertCalendarToDate(Calendar c) {
        final Date d = new Date();
        d.setTime(c.getTimeInMillis());
        return d;
    }

    /**
     * 日期字符串转java.util.Date日期
     */
    public static Date stringToDate(String dateStr) throws Exception {
        return parseDate(dateStr, 3);
    }

    /**
     * 日期字符串转指定格式的java.util.Date日期
     */
    public static Date parseDate(String dateStr, int format) throws Exception {
        if (dateStr == null || dateStr.length() == 0) {
            return null;
        }

        try {
            return getDateFormater(format).parse(dateStr);
        } catch (ParseException ex) {
            return parseDate(dateStr, format + 1);
        } catch (ArrayIndexOutOfBoundsException ex) {
            throw new Exception("UT-07001:日志字符串" + dateStr + "格式不支持", ex);
        }
    }

    // ======================xx转Calendar方法======================================================================================

    /**
     * java.util.Date转Calendar
     */
    public static Calendar convUtilDateToUtilCalendar(Date date) {
        if (date == null) {
            return null;
        }

        final GregorianCalendar gc = new GregorianCalendar();
        gc.setTimeInMillis(date.getTime());

        return gc;
    }

    /**
     * java.sql.Timestamp转Calendar
     */
    public static Calendar convSqlTimestampToUtilCalendar(Timestamp date) {
        if (date == null) {
            return null;
        }
        final GregorianCalendar gc = new GregorianCalendar();
        gc.setTimeInMillis(date.getTime());
        return gc;
    }

    /**
     * 日期字符串转Calendar
     */
    public static Calendar parseDate(String dateStr) throws Exception {
        final Date result = parseDate(dateStr, 0);
        Calendar cal = null;

        if (result != null) {
            cal = new GregorianCalendar(0, 0, 0, 0, 0, 0);
            cal.setTime(result);
        }

        return cal;
    }

    // ======================日期转Timestamp方法======================================================================================

    /**
     * java.util.Date转java.sql.Timestamp
     */
    public static Timestamp convUtilDateToSqlTimestamp(Date date) {
        if (date == null) {
            return null;
        }
        return new Timestamp(date.getTime());
    }

    /**
     * Calendar日期对象转Timestamp日期对象
     */
    public static Timestamp convUtilCalendarToSqlTimestamp(Calendar date) {
        if (date == null) {
            return null;
        }
        return new Timestamp(date.getTimeInMillis());
    }

    /**
     * Calendar日期对象转Timestamp日期对象
     */
    public static Timestamp parseTimestamp(Calendar calendar) {
        return new Timestamp(calendar.getTimeInMillis());
    }

    /**
     * 日期字符串转java.sql.Timestamp
     */
    public static Timestamp parseTimestamp(String dateStr) throws Exception {
        try {
            return new Timestamp(getDateFormater(3).parse(dateStr).getTime());
        } catch (ParseException ex) {
            throw new Exception("UT-07001:日志字符串" + dateStr + "格式不正确,格式:" + DATEFORMAT[3], ex);
        }
    }

    /**
     * 根据指定日期格式,日期字符串转java.sql.Timestamp
     */
    public static Timestamp parseTimestamp(String dateStr, int format) throws Exception {
        try {
            return new Timestamp(getDateFormater(format).parse(dateStr).getTime());
        } catch (ParseException ex) {
            throw new Exception("UT-07001:日志字符串" + dateStr + "格式不支持", ex);
        }
    }

    // ======================日期计算方法======================================================================================

    /**
     * 获取两个Calendar日期对象的天数差
     */
    public static int calendarMinus(Calendar d1, Calendar d2) {
        if (d1 == null || d2 == null) {
            return 0;
        }

        d1.set(11, 0);
        d1.set(12, 0);
        d1.set(13, 0);
        d1.set(14, 0);

        d2.set(11, 0);
        d2.set(12, 0);
        d2.set(13, 0);
        d2.set(14, 0);

        long t1 = d1.getTimeInMillis();
        long t2 = d2.getTimeInMillis();
        final long daylong = 86400000L;
        t1 -= t1 % daylong;
        t2 -= t2 % daylong;

        final long t = t1 - t2;
        final int value = (int) (t / daylong);

        return value;
    }

    /**
     * 获取两个Calendar日期对象的天数差
     */
    public static long calendarminus(Calendar d1, Calendar d2) {
        if (d1 == null || d2 == null) {
            return 0L;
        }
        return (d1.getTimeInMillis() - d2.getTimeInMillis()) / 86400000L;
    }

    /**
     * 给定任意日期Calendar对象,计算所在月天数
     */
    public static int calcMonthDays(Calendar date) {
        final Calendar t1 = (Calendar) date.clone();
        final Calendar t2 = (Calendar) date.clone();
        final int year = date.get(1);
        final int month = date.get(2);
        t1.set(year, month, 1);
        t2.set(year, month + 1, 1);
        t2.add(6, -1);
        return calendarMinus(t2, t1) + 1;
    }

    private static int calcDays(long t1, long t2) {
        final long millis = t1 - t2;
        if (millis == 0) {
            return 0;
        }
        return (int) (millis / (24 * 3600 * 1000));
    }

    /**
     * 获取两个Calendar日期对象的天数差
     */
    public static int calcDays(Calendar c1, Calendar c2) {
        return calcDays(c1.getTimeInMillis(), c2.getTimeInMillis());
    }

    /**
     * 获取两个java.util.Date日期对象的天数差
     */
    public static int calcDays(Date d1, Date d2) {
        return calcDays(d1.getTime(), d2.getTime());
    }

    /**
     * 给定任意日期Calendar对象,计算所在月的最后一天
     */
    public static Calendar lastDay(Calendar c) {
        final Calendar t = (Calendar) c.clone();
        t.set(Calendar.DAY_OF_MONTH, 1);
        t.add(Calendar.MONTH, 1);
        t.add(Calendar.DAY_OF_MONTH, -1);
        return t;
    }

    /**
     * 给定任意日期字符串,计算所在月的最后一天
     */
    public static Calendar lastDay(String dateStr) throws Exception {
        final Calendar t = parseDate(dateStr);
        t.set(Calendar.DAY_OF_MONTH, 1);
        t.add(Calendar.MONTH, 1);
        t.add(Calendar.DAY_OF_MONTH, -1);
        return t;

    }

    /**
     * 给定任意日期,计算所在季的季起日期和季终日期
     */
    public static Calendar[] calcAQuarter(Calendar day) {
        final Calendar[] quarter = new Calendar[2];

        int month = 0;
        quarter[0] = (Calendar) day.clone();
        month = quarter[0].get(Calendar.MONTH);

        if (month < 3) {
            month = 0;
        } else if (month < 6) {
            month = 3;
        } else if (month < 9) {
            month = 6;
        } else {
            month = 9;
        }

        quarter[0].set(Calendar.MONTH, month);
        quarter[0].set(Calendar.DAY_OF_MONTH, 1);

        quarter[1] = (Calendar) quarter[0].clone();
        quarter[1].set(Calendar.MONTH, month + 2);
        quarter[1] = lastDay(quarter[1]);

        return quarter;
    }

    /**
     * 获取年、月、日、时、分、秒、毫秒
     */
    public static int[] getYearMonthDayHH24MiMM(Calendar calendar) {
        return new int[] {calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE),
                calendar.get(Calendar.SECOND), calendar.get(Calendar.MILLISECOND) };
    }

    /**
     * 获取年、月、日、时、分、秒、毫秒
     */
    public static int[] getYearMonthDayHH24MiMM(Date date) {
        final Calendar calendar = getSystemCurrentTime();
        calendar.setTime(date);
        return getYearMonthDayHH24MiMM(calendar);
    }

    /**
     * 好微妙转毫秒
     */
    public static long nsToMs(long nsTime) {
        return nsTime / 1000000;
    }

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值