使用Date CalendarAPI的日期工具类

下面是一个使用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())));

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值