java8 日期时间操作工具类 DateUtil


DateTime API作为java8的新增功能,为我们在java中进行日期时间的处理增添了许多的方便性

1. Date

对于日期类操作,提供了LocalDate。以 yyyy-MM-dd 的默认格式表示日期。可以使用 now() 方法来获取当前日期。可以提供年、月和日期的输入参数来创建 LocalDate 实例。

2. Time

对于时间类操作,提供了LocalTime。默认格式是 hh:mm:ss.zzz。和 LocalDate 一样。通过传递小时、分钟和秒作为输入参数来提供时区支持和创建实例。

3. DateTime

LocalDateTime 可以用来表示日期时间。默认格式为 yyyy-MM-dd-HH-mm-ss.zzz 的日期时间。提供了一个工厂方法,采用 LocalDate 和 LocalTime 输入参数来创建 LocalDateTime 实例。

4. DateUtil

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneOffset;
import java.time.temporal.ChronoUnit;

public class DateUtil {


    // -------------------------------localDate操作-------------------------------

    /**
     * startDate和当前的时间差
     *
     * @param startDate String类型,支持‘yyyy-MM-dd’格式
     * @return
     */
    public static long dateDiff(String startDate) {
        return dateDiff(LocalDate.parse(startDate));
    }

    /**
     * startDate和当前的时间差
     *
     * @param startDate
     * @return
     */
    public static long dateDiff(LocalDate startDate) {
        return LocalDate.now().toEpochDay() - startDate.toEpochDay();
    }

    /**
     * 判断给定的日期是否是当天
     *
     * @param date String类型,支持‘yyyy-MM-dd’格式
     * @return
     */
    public static boolean isToday(String date) {
        return LocalDate.now().equals(LocalDate.parse(date));
    }

    /**
     * 判断给定的日期是否是当天
     *
     * @param date
     * @return
     */
    public static boolean isToday(LocalDate date) {
        return LocalDate.now().equals(date);
    }

    /**
     * 在startDate的基础上增加interval天
     *
     * @param startDate
     * @param interval
     * @return
     */
    public static LocalDate dateAdd(LocalDate startDate, int interval) {
        return startDate.plus(interval, ChronoUnit.DAYS);
    }

    /**
     * 在当前日期的基础上增加interval天
     *
     * @param interval
     * @return
     */
    public static LocalDate dateAdd(int interval) {
        return LocalDate.now().plus(interval, ChronoUnit.DAYS);
    }

    /**
     * 在startDate的基础上减少interval天
     *
     * @param startDate
     * @param interval
     * @return
     */
    public static LocalDate dateSub(LocalDate startDate, int interval) {
        return startDate.minus(interval, ChronoUnit.DAYS);
    }

    /**
     * 在当前日期的基础上减少interval天
     *
     * @param interval
     * @return
     */
    public static LocalDate dateSub(int interval) {
        return LocalDate.now().minus(interval, ChronoUnit.DAYS);


    }

    /**
     * 获取当前年份
     *
     * @return
     */
    public static int getYear() {
        return LocalDate.now().getYear();
    }

    /**
     * 获取当前月份
     *
     * @return
     */
    public static int getMonth() {
        return LocalDate.now().getMonth().getValue();
    }

    /**
     * 获取当前是一年中的第几天
     *
     * @return
     */
    public static int getDayOfYear() {
        return LocalDate.now().getDayOfYear();
    }

    /**
     * 获取当前是当月中的第几天
     *
     * @return
     */
    public static int getDayOfMonth() {
        return LocalDate.now().getDayOfMonth();
    }

    /**
     * 获取当前是本周中的第几天
     *
     * @return
     */
    public static int getDayOfWeek() {
        return LocalDate.now().getDayOfWeek().getValue();
    }

    /**
     * 返回今年是否是闰年
     * 闰年:
     *
     * @return
     */
    public static boolean isLeapYear() {
        return LocalDate.now().isLeapYear();
    }

    /**
     * 获取当月一共有几天
     *
     * @return
     */
    public static int lengthOfMonth() {
        return LocalDate.now().lengthOfMonth();
    }

    /**
     * 获取本年一共有几天
     *
     * @return
     */
    public static int lengthOfYear() {
        return LocalDate.now().lengthOfYear();
    }

    // -------------------------------localTime操作-------------------------------

    /**
     * 在当前时间的基础上增加hour小时,minutes分钟和seconds秒
     *
     * @param hour
     * @param minutes
     * @param seconds
     * @return
     */
    public static LocalTime timeAnd(int hour, int minutes, int seconds) {
        return LocalTime.now()
                .plus(hour, ChronoUnit.HOURS)
                .plus(minutes, ChronoUnit.MINUTES)
                .plus(seconds, ChronoUnit.SECONDS);
    }

    /**
     * 在当前时间的基础上减少hour小时,minutes分钟和seconds秒
     *
     * @param hour
     * @param minutes
     * @param seconds
     * @return
     */
    public static LocalTime timeSub(int hour, int minutes, int seconds) {
        return LocalTime.now()
                .minus(hour, ChronoUnit.HOURS)
                .minus(minutes, ChronoUnit.MINUTES)
                .minus(seconds, ChronoUnit.SECONDS);
    }

    /**
     * 生成一个指定hour小时,minutes分钟和seconds秒的LocalTime
     *
     * @param hour
     * @param minutes
     * @param seconds
     * @return
     */
    public static LocalTime makeTime(int hour, int minutes, int seconds) {
        return LocalTime.now().withHour(hour).withMinute(minutes).withSecond(seconds);
    }


    // ---------------localDateTime和UnixStamp操作-------------------------------
    
    /**
     * 将localDateTime转为秒级时间戳
     *
     * @param localDateTime
     * @return
     */
    public long toUnixStamp(LocalDateTime localDateTime) {
        return localDateTime.toEpochSecond(ZoneOffset.of("+8"));
    }

    /**
     * 将localDate转为秒级时间戳
     * 默认是0时0分0秒
     *
     * @param localDate
     * @return
     */
    public long toUnixStamp(LocalDate localDate) {
        LocalTime localTime = LocalTime.now().withHour(0).withMinute(0).withSecond(0);
        return toUnixStamp(LocalDateTime.of(localDate, localTime));
    }


    /**
     * 判断给定的时间戳是否是当天
     *
     * @param dataUnixStamp
     * @return
     */
    public static boolean isToday(long dataUnixStamp) {
        return LocalDate.now().equals(fromUnixStamp(dataUnixStamp).toLocalDate());
    }

    /**
     * 将时间戳转为LocalDateTime格式
     *
     * @param unixStamp
     * @return
     */
    public static LocalDateTime fromUnixStamp(long unixStamp) {
        return LocalDateTime.ofEpochSecond(unixStamp, 0, ZoneOffset.of("+8"));
    }


}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值