DateUtils.java 8.75 KB
package com.irrigation.icl.utils;

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

public class DateUtils {


    /**
     * 当前时间,转换为{@link Date}对象
     *
     * @return 当前时间
     */
    public static Date date() {
        return new Date();
    }


    /**
     * 创建Calendar对象,时间为默认时区的当前时间
     *
     * @return Calendar对象
     * @since 4.6.6
     */
    public static Calendar calendar() {
        return Calendar.getInstance();
    }

    /**
     * 转换为Calendar对象
     *
     * @param date 日期对象
     * @return Calendar对象
     */
    public static Calendar calendar(Date date) {
        return calendar(date.getTime());
    }

    /**
     * 转换为Calendar对象
     *
     * @param millis 时间戳
     * @return Calendar对象
     */
    public static Calendar calendar(long millis) {
        final Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(millis);
        return cal;
    }

    private static Calendar toCalendar(Date date) {
        return toCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT), date);
    }


    private static Calendar toCalendar(TimeZone zone, Locale locale, Date date) {
        if (null == locale) {
            locale = Locale.getDefault(Locale.Category.FORMAT);
        }
        final Calendar cal = (null != zone) ? Calendar.getInstance(zone, locale) : Calendar.getInstance(locale);
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.setTime(date);
        return cal;
    }

    /**
     * 当前时间的时间戳
     *
     * @return 时间
     */
    public static long currentTimeMillis() {
        return System.currentTimeMillis();
    }


    /**
     * 当前时间的时间戳(秒)
     *
     * @return 当前时间秒数
     */
    public static long currentSeconds() {
        return System.currentTimeMillis() / 1000;
    }

    /**
     * 获得年的部分
     *
     * @param date 日期
     * @return 年的部分
     */
    public static int year(Date date) {
        return toCalendar(date).get(Calendar.YEAR);
    }


    /**
     * 获得指定日期所属季度,从1开始计数
     *
     * @param date 日期
     * @return 第几个季度
     * @since 4.1.0
     */
    public static int quarter(Date date) {
        return month(date) / 3 + 1;
    }


    /**
     * 获得月份,从0开始计数
     *
     * @param date 日期
     * @return 月份,从0开始计数
     */
    public static int month(Date date) {
        return toCalendar(date).get(Calendar.MONTH);
    }


    /**
     * 获得指定日期是所在年份的第几周<br>
     *
     * @param date 日期
     * @return 周
     */
    public static int weekOfYear(Date date) {
        return toCalendar(date).get(Calendar.WEEK_OF_YEAR);
    }

    /**
     * 获得指定日期是所在月份的第几周<br>
     *
     * @param date 日期
     * @return 周
     */
    public static int weekOfMonth(Date date) {
        return toCalendar(date).get(Calendar.WEEK_OF_MONTH);
    }

    /**
     * 获得指定日期是这个日期所在月份的第几天<br>
     *
     * @param date 日期
     * @return 天
     */
    public static int dayOfMonth(Date date) {
        return toCalendar(date).get(Calendar.DAY_OF_MONTH);
    }

    /**
     * 获得指定日期是星期几,1表示周日,2表示周一
     *
     * @param date 日期
     * @return 天
     */
    public static int dayOfWeek(Date date) {
        return toCalendar(date).get(Calendar.DAY_OF_WEEK);

    }

    /**
     * 获得指定日期的小时数部分<br>
     *
     * @param date 日期
     * @return 小时数
     */
    public static int hour(Date date) {
        return toCalendar(date).get(Calendar.HOUR_OF_DAY);
    }

    /**
     * 获得指定日期的分钟数部分<br>
     * 例如:10:04:15.250 =》 4
     *
     * @param date 日期
     * @return 分钟数
     */
    public static int minute(Date date) {
        return toCalendar(date).get(Calendar.MINUTE);

    }

    /**
     * 获得指定日期的秒数部分<br>
     *
     * @param date 日期
     * @return 秒数
     */
    public static int second(Date date) {
        return toCalendar(date).get(Calendar.SECOND);
    }

    /**
     * 获得指定日期的毫秒数部分<br>
     *
     * @param date 日期
     * @return 毫秒数
     */
    public static int millsecond(Date date) {
        return toCalendar(date).get(Calendar.MILLISECOND);

    }

    /**
     * 当前时间,格式 yyyy-MM-dd HH:mm:ss
     *
     * @return 当前时间的标准形式字符串
     */
    public static String now() {
        return formatDateTime(new Date());
    }

    /**
     * 当前日期,格式 yyyy-MM-dd
     *
     * @return 当前日期的标准形式字符串
     */
    public static String today() {
        return formatDate(new Date());
    }

    // ------------------------------------ Format start ----------------------------------------------


    /**
     * 根据特定格式格式化日期
     *
     * @param date   被格式化的日期
     * @param format 日期格式,常用格式见:
     * @return 格式化后的字符串
     */
    public static String format(Date date, String format) {
        if (null == date || ObjectUtils.stringIsEmpty(format)) {
            return null;
        }
        return DateFormat.getInstance(format).format(date);
    }

    /**
     * 格式化日期时间<br>
     * 格式 yyyy-MM-dd HH:mm:ss
     *
     * @param date 被格式化的日期
     * @return 格式化后的日期
     */
    public static String formatDateTime(Date date) {
        if (null == date) {
            return null;
        }
        return DateFormat.NORM_DATETIME_FORMAT.format(date);
    }

    /**
     * 格式化日期部分(不包括时间)<br>
     * 格式 yyyy-MM-dd
     *
     * @param date 被格式化的日期
     * @return 格式化后的字符串
     */
    public static String formatDate(Date date) {
        if (null == date) {
            return null;
        }
        return DateFormat.NORM_DATE_FORMAT.format(date);
    }

    /**
     * 格式化时间<br>
     * 格式 HH:mm:ss
     *
     * @param date 被格式化的日期
     * @return 格式化后的字符串
     * @since 3.0.1
     */
    public static String formatTime(Date date) {
        if (null == date) {
            return null;
        }
        return DateFormat.NORM_TIME_FORMAT.format(date);
    }

    // ------------------------------------ Format end ----------------------------------------------

    // ------------------------------------ Parse start ----------------------------------------------


    /**
     * 构建DateTime对象
     *
     * @param dateStr Date字符串
     * @param format  格式
     * @return DateTime对象
     */
    public static Date parse(String dateStr, String format) {
        try {
            return DateFormat.getInstance(format).parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将特定格式的日期转换为Date对象
     *
     * @param dateStr 特定格式的日期
     * @param format  格式,例如yyyy-MM-dd
     * @param locale  区域信息
     * @return 日期对象
     * @since 4.5.18
     */
    public static Date parse(String dateStr, String format, Locale locale) {
        try {
            return DateFormat.getInstance(format, locale).parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 格式yyyy-MM-dd HH:mm:ss
     *
     * @param dateString 标准形式的时间字符串
     * @return 日期对象
     */
    public static Date parseDateTime(String dateString) {
        return parse(dateString, DatePattern.NORM_DATETIME_PATTERN);
    }

    /**
     * 解析格式为yyyy-MM-dd的日期,忽略时分秒
     *
     * @param dateString 标准形式的日期字符串
     * @return 日期对象
     */
    public static Date parseDate(String dateString) {
        return parse(dateString, DatePattern.NORM_DATE_PATTERN);
    }

    /**
     * 解析时间,格式HH:mm:ss,日期部分默认为1970-01-01
     *
     * @param timeString 标准形式的日期字符串
     * @return 日期对象
     */
    public static Date parseTime(String timeString) {
        return parse(timeString, DatePattern.NORM_TIME_PATTERN);
    }

    // ------------------------------------ Parse end ----------------------------------------------

    /**
     * date 转换为 long
     *
     * @param date
     * @return
     */
    public static Long dateToLong(Date date) {
        return ObjectUtils.isNull(date) ? null : date.getTime();

    }


}