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
    评论
以下是一个基于jdk8的日期时间计算工具类的示例代码: ``` import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Period; import java.time.format.DateTimeFormatter; public class DateUtil { private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern("HH:mm:ss"); private static final DateTimeFormatter DATE_TIME_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); public static String formatDate(LocalDate date) { return DATE_FORMAT.format(date); } public static String formatTime(LocalTime time) { return TIME_FORMAT.format(time); } public static String formatDateTime(LocalDateTime dateTime) { return DATE_TIME_FORMAT.format(dateTime); } public static LocalDate parseDate(String dateStr) { return LocalDate.parse(dateStr, DATE_FORMAT); } public static LocalTime parseTime(String timeStr) { return LocalTime.parse(timeStr, TIME_FORMAT); } public static LocalDateTime parseDateTime(String dateTimeStr) { return LocalDateTime.parse(dateTimeStr, DATE_TIME_FORMAT); } public static LocalDate addDays(LocalDate date, int days) { return date.plusDays(days); } public static LocalDateTime addHours(LocalDateTime dateTime, int hours) { return dateTime.plusHours(hours); } public static LocalDateTime addMinutes(LocalDateTime dateTime, int minutes) { return dateTime.plusMinutes(minutes); } public static LocalDateTime addSeconds(LocalDateTime dateTime, int seconds) { return dateTime.plusSeconds(seconds); } public static Period getPeriod(LocalDate startDate, LocalDate endDate) { return Period.between(startDate, endDate); } public static long getSeconds(LocalDateTime startDateTime, LocalDateTime endDateTime) { return startDateTime.until(endDateTime, java.time.temporal.ChronoUnit.SECONDS); } public static long getMinutes(LocalDateTime startDateTime, LocalDateTime endDateTime) { return startDateTime.until(endDateTime, java.time.temporal.ChronoUnit.MINUTES); } public static long getHours(LocalDateTime startDateTime, LocalDateTime endDateTime) { return startDateTime.until(endDateTime, java.time.temporal.ChronoUnit.HOURS); } public static long getDays(LocalDate startDate, LocalDate endDate) { return startDate.until(endDate, java.time.temporal.ChronoUnit.DAYS); } } ``` 这个工具类包含了日期时间格式化、解析、加减、差值计算等常用操作。使用该工具类可以方便地处理日期时间计算相关的业务需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值