java-DateUtils

要求环境在JDK8以上

package com.ch.util;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 时间工具类
 * @author 019530
 * @date 2020-07-01
 */
public class DateUtils {
    /**
     * LocalDateTime
     *   1.生成对象(ISO 8601规范)
     *   LocalDateTime.now()
     *   LocalDateTime.of(2020, 07, 01, 15, 00, 00)
     *   LocalDateTime dt = LocalDateTime.parse("2020-07-01T15:00:00")
     *   2.调整时间
     *   withYear() withMonth() 等方法设置时间
     *   time.plusDays() time.plusHours() 等增加时间
     *   time.minusDays() time.minusHours() 等减少时间
     *   3.比较时间
     *   .isBefore() .isAfter()
     *   4.额外的时间获取
     *   .firstDayOfNextMonth() .lastDayOfMonth()
     *
     * ZonedDateTime
     *  LocalDateTime总是表示本地日期和时间,要表示一个带时区的日期和时间,就需要ZonedDateTime (ZonedDateTime=LocalDateTime+ZoneId)
     *  1.LocalDateTime.atZone(ZoneId.systemDefault()) -> ZonedDateTime
     *
     * Instant
     *   Instant.now().toEpochMilli()获取当前13位时间戳
     *   Instant.now().getEpochSecond() 获取当前10位的时间戳
     *
     * Duration
     *   LocalDateTime之间的时间间隔
     *   1. Duration.toDays() .toHours() 获取时间间隔的天数 小时数
     *   2. plus() minus()  时间间隔再加上时间 或者 减去时间
     *
     */

    public static DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    public static DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * 将 String 转化成 LocalDateTime (format)
     * @param time  字符串
     * @param format  格式
     * @return LocalDateTime
     */
    public static LocalDateTime parseStringToDateTime(String time, String format) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(time, df);
    }

    /**
     * 将 LocalDateTime 转化成 String (format)
     * @param dateTime  日期时间
     * @param format  格式
     * @return String
     */
    public static String parseDateTimeToString(LocalDateTime dateTime, String format) {
        DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
        return dateTime.format(df);
    }

    /**
     * Date类型转化为LocalDateTime
     * @param date  日期
     * @return LocalDateTime
     */
    public static LocalDateTime date2DateTime(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(),  ZoneOffset.systemDefault());
    }

    /**
     * LocalDateTime 类型转化为 Date
     * @param time  日期时间
     * @return Date
     */
    public static Date dateTime2Date(LocalDateTime time) {
        return Date.from(time.atZone(ZoneOffset.systemDefault()).toInstant());
    }

    /**
     * LocalDateTime 转化为 时间戳 (正8时区)
     * @param time  日期时间
     * @return Long
     */
    public static Long getMilliByDateTime(LocalDateTime time) {
        return time.toInstant(OffsetDateTime.now().getOffset()).toEpochMilli();
    }

    /**
     * 时间戳(10位) 转化为 LocalDateTime (正8时区)
     * @param seconds  秒数
     * @return LocalDateTime
     */
    public static LocalDateTime getDateTimeBySeconds(Long seconds) {
        return LocalDateTime.ofEpochSecond(seconds,0, ZoneOffset.of("+8"));
    }

    /**
     * 时间戳(13位) 转化为 LocalDateTime (正8时区)
     * @param milliseconds  毫秒数
     * @return LocalDateTime
     */
    public static LocalDateTime getDateTimeByMills(Long milliseconds) {
        return Instant.ofEpochMilli(milliseconds).atZone(ZoneOffset.of("+8")).toLocalDateTime();
    }

    /**
     * 获取两个LocalDateTime之间的时间间隔
     * @param start  开始时间
     * @param end  结束时间
     * @return Duration
     */
    public static Duration getDuration(LocalDateTime start, LocalDateTime end) {
        return Duration.between(start, end);
    }
}

你可能感兴趣的:(java-DateUtils)