欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Date CalendarAPI的日期工具类

程序员文章站 2022-06-24 22:33:21
...

下面是一个使用Date,Calendar类实现的日期的工具类,可能有些地方还需要作调整,现在是凭感觉写的,之后还会写一个使用Java8新日期API的工具类,二者功能相同。

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

/**
 * 日期工具类
 **/
public class DateUtil {

    public static final String DATE_PATTERN = "yyyy-MM-dd";
    public static final String TIME_PATTERM = "yyyy-MM-dd HH:mm:ss";

    /**
     * 按传入的格式 返回格式化的当前日期
     *
     * @param pattern
     * @return
     */
    public static String currentDayStr(String pattern) {
        return currentDayStr(new Date(), pattern);
    }

    /**
     * 按传入的格式 返回格式化的传入日期
     *
     * @param pattern
     * @return
     */
    public static String currentDayStr(Date date, String pattern) {
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        return formatter.format(date);
    }

    /**
     * 判断当前日期和传入日期是否是同一个月
     *
     * @param data
     * @return
     */
    public static boolean isCurrentMonth(Date data) {
        Calendar now = Calendar.getInstance();
        now.setTime(new Date());
        Calendar otherDate = Calendar.getInstance();
        otherDate.setTime(data);
        return now.get(Calendar.MONTH) == otherDate.get(Calendar.MONTH)
                && now.get(Calendar.YEAR) == otherDate.get(Calendar.YEAR);
    }

    /**
     * 判断传入日期和当前日期是否是同一天
     *
     * @param data
     * @return
     */
    public static boolean isCurrentDay(Date data) {
        Calendar now = Calendar.getInstance();
        now.setTime(new Date());
        Calendar otherDate = Calendar.getInstance();
        otherDate.setTime(data);
        return now.get(Calendar.DAY_OF_YEAR) == otherDate.get(Calendar.DAY_OF_YEAR)
                && now.get(Calendar.MONTH) == otherDate.get(Calendar.MONTH)
                && now.get(Calendar.YEAR) == otherDate.get(Calendar.YEAR);
    }

    /**
     * 返回传入日期的下一天日期,时分秒和当前日期相同
     *
     * @param currentDate 当前日期
     * @return
     */
    public static Date nextDay(Date currentDate) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);
        calendar.add(Calendar.DAY_OF_YEAR, 1);
        return calendar.getTime();
    }

    /**
     * 返回传入日期的上一天日期,时分秒和当前日期相同
     *
     * @param currentDate 当前日期
     * @return
     */
    public static Date previousDay(Date currentDate) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return calendar.getTime();
    }

    /**
     * 返回传入日期当月的第一天日期,时分秒和当前日期相同
     *
     * @param currentDate
     * @return
     */
    public static Date firstDayOfMonth(Date currentDate) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        return calendar.getTime();
    }

    /**
     * 返回传入日期当月的最后一天日期,时分秒和当前日期相同
     *
     * @param currentDate
     * @return
     */
     public static Date lastDayOfMonth(Date currentDate) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(currentDate);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        calendar.add(Calendar.MONTH, 1);
        calendar.add(Calendar.DAY_OF_YEAR, -1);
        return calendar.getTime();
    }

    /**
     * 返回传入日期的当天开始 时分秒都是0
     *
     * @param now
     * @return
     */
    public static Date startOfDay(Date now) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        return calendar.getTime();
    }

    /**
     * 返回传入日期的当天结束 也是第二天的开始时间
     *
     * @param now
     * @return
     */
    public static Date endOfDay(Date now) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.add(Calendar.DAY_OF_YEAR, 1);
        return calendar.getTime();
    }

    /**
     * 判断当前日期和传入日期是否是同一个月
     *
     * @param dateStr     日期格式 yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss
     * @param hasTimePart 如果传入格式是 yyyy-MM-dd,则传入false,格式是yyyy-MM-dd HH:mm:ss 传入true
     * @return
     */
    public static boolean isCurrentMonth(String dateStr, boolean hasTimePart) throws ParseException {
        return isCurrentMonth(parseDate(dateStr, hasTimePart));
    }

    /**
     * 判断传入日期和当前日期是否是同一天
     *
     * @param dateStr     日期格式 yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss
     * @param hasTimePart 如果传入格式是 yyyy-MM-dd,则传入false,格式是yyyy-MM-dd HH:mm:ss 传入true
     * @return
     */
    public static boolean isCurrentDay(String dateStr, boolean hasTimePart) throws ParseException {
        return isCurrentDay(parseDate(dateStr, hasTimePart));
    }

    /**
     * 返回传入日期的下一天日期,时分秒和当前日期相同
     *
     * @param dateStr     日期格式 yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss
     * @param hasTimePart 如果传入格式是 yyyy-MM-dd,则传入false,格式是yyyy-MM-dd HH:mm:ss 传入true
     * @return
     */
    public static Date nextDay(String dateStr, boolean hasTimePart) throws ParseException {
        return nextDay(parseDate(dateStr, hasTimePart));
    }

    /**
     * 返回传入日期的上一天日期,时分秒和当前日期相同
     *
     * @param dateStr     日期格式 yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss
     * @param hasTimePart 如果传入格式是 yyyy-MM-dd,则传入false,格式是yyyy-MM-dd HH:mm:ss 传入true
     * @return
     */
    public static Date previousDay(String dateStr, boolean hasTimePart) throws ParseException {
        return previousDay(parseDate(dateStr, hasTimePart));
    }

    /**
     * 返回传入日期当月的第一天日期,时分秒和当前日期相同
     *
     * @param dateStr     日期格式 yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss
     * @param hasTimePart 如果传入格式是 yyyy-MM-dd,则传入false,格式是yyyy-MM-dd HH:mm:ss 传入true
     * @return
     */
    public static Date firstDayOfMonth(String dateStr, boolean hasTimePart) throws ParseException {
        return firstDayOfMonth(parseDate(dateStr, hasTimePart));
    }

    /**
     * 返回传入日期当月的最后一天日期,时分秒和当前日期相同
     *
     * @param dateStr     日期格式 yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss
     * @param hasTimePart 如果传入格式是 yyyy-MM-dd,则传入false,格式是yyyy-MM-dd HH:mm:ss 传入true
     * @return
     */
    public static Date lastDayOfMonth(String dateStr, boolean hasTimePart) throws ParseException {
        return lastDayOfMonth(parseDate(dateStr, hasTimePart));
    }

    /**
     * 返回传入日期的当天开始 时分秒都是0
     *
     * @param dateStr     日期格式 yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss
     * @param hasTimePart 如果传入格式是 yyyy-MM-dd,则传入false,格式是yyyy-MM-dd HH:mm:ss 传入true
     * @return
     */
    public static Date startOfDay(String dateStr, boolean hasTimePart) throws ParseException {
        return startOfDay(parseDate(dateStr, hasTimePart));
    }

    /**
     * 返回传入日期的当天结束 也是第二天的开始时间
     *
     * @param dateStr     日期格式 yyyy-MM-dd 或者 yyyy-MM-dd HH:mm:ss
     * @param hasTimePart 如果传入格式是 yyyy-MM-dd,则传入false,格式是yyyy-MM-dd HH:mm:ss 传入true
     * @return
     */
    public static Date endOfDay(String dateStr, boolean hasTimePart) throws ParseException {
        return endOfDay(parseDate(dateStr, hasTimePart));
    }

    /**
     * 判断当前日期和传入日期是否是同一个月
     * @param timeStamp 毫秒时间戳
     * @return
     */
    public static boolean isCurrentMonth(long timeStamp) {
        return isCurrentMonth(new Date(timeStamp));
    }

    /**
     * 判断传入日期和当前日期是否是同一天
     * @param timeStamp 毫秒时间戳
     * @return
     */
    public static boolean isCurrentDay(long timeStamp) {
        return isCurrentDay(new Date(timeStamp));
    }

    /**
     * 返回传入日期的下一天日期,时分秒和当前日期相同
     *
     * @param timeStamp 毫秒的时间戳
     * @return
     */
    public static Date nextDay(long timeStamp) {
        return nextDay(new Date(timeStamp));
    }

    /**
     * 返回传入日期的上一天日期,时分秒和当前日期相同
     *
     * @param timeStamp 毫秒的时间戳
     * @return
     */
    public static Date previousDay(long timeStamp) {
        return previousDay(new Date(timeStamp));
    }

    /**
     * 返回传入日期当月的第一天日期,时分秒和当前日期相同
     *
     * @param timeStamp 毫秒的时间戳
     * @return
     */
    public static Date firstDayOfMonth(long timeStamp) {
        return firstDayOfMonth(new Date(timeStamp));
    }

    /**
     * 返回传入日期当月的最后一天日期,时分秒和当前日期相同
     *
     * @param timeStamp 毫秒的时间戳
     * @return
     */
    public static Date lastDayOfMonth(long timeStamp) {
        return lastDayOfMonth(new Date(timeStamp));
    }

    /**
     * 返回传入日期的当天开始 时分秒都是0
     *
     * @param nowTimeStamp 毫秒的时间戳
     * @return
     */
    public static Date startOfDay(long nowTimeStamp) {
        return startOfDay(new Date(nowTimeStamp));
    }

    /**
     * 返回传入日期的当天结束 也是第二天的开始时间
     *
     * @param nowTimeStamp 毫秒的时间戳
     * @return
     */
    public static Date endOfDay(long nowTimeStamp) {
        return endOfDay(new Date(nowTimeStamp));
    }

    private static SimpleDateFormat getDateFormat(boolean hasTimePart) {
        if (hasTimePart) {
            return new SimpleDateFormat(TIME_PATTERM);
        } else {
            return new SimpleDateFormat(DATE_PATTERN);
        }
    }

    private static Date parseDate(String dateStr, boolean hasTimePart) throws ParseException {
        SimpleDateFormat dateFormat = getDateFormat(hasTimePart);
        return dateFormat.parse(dateStr);
    }


    public static void main(String[] args) throws ParseException {
        System.out.println(DateUtil.nextDay(new Date()));
        System.out.println(DateUtil.firstDayOfMonth(new Date()));
        System.out.println(DateUtil.lastDayOfMonth(new Date()));
        System.out.println(DateUtil.startOfDay(new Date()));
        System.out.println(DateUtil.endOfDay(new Date()));

        System.out.println((DateUtil.endOfDay("2018-12-12 12:12:12", true)));
        System.out.println((DateUtil.endOfDay(System.currentTimeMillis())));

    }

}
相关标签: 日期