/* * Copyright (c) 2018-2028, DreamLu All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: DreamLu 卢春梦 (596392912@qq.com) */ package com.vci.starter.web.util.Lcm; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.Temporal; import java.time.temporal.TemporalAccessor; import java.util.Date; /** * DateTime 工具类 * * @author L.cm */ public class DateTimeUtil { public static final DateTimeFormatter DATETIME_FORMAT = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME); public static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATE); public static final DateTimeFormatter TIME_FORMAT = DateTimeFormatter.ofPattern(DateUtil.PATTERN_TIME); /** * 日期时间格式化 * * @param temporal 时间 * @return 格式化后的时间 */ public static String formatDateTime(TemporalAccessor temporal) { return DATETIME_FORMAT.format(temporal); } /** * 日期时间格式化 * * @param temporal 时间 * @return 格式化后的时间 */ public static String formatDate(TemporalAccessor temporal) { return DATE_FORMAT.format(temporal); } /** * 时间格式化 * * @param temporal 时间 * @return 格式化后的时间 */ public static String formatTime(TemporalAccessor temporal) { return TIME_FORMAT.format(temporal); } /** * 日期格式化 * * @param temporal 时间 * @param pattern 表达式 * @return 格式化后的时间 */ public static String format(TemporalAccessor temporal, String pattern) { return DateTimeFormatter.ofPattern(pattern).format(temporal); } /** * 将字符串转换为时间 * * @param dateStr 时间字符串 * @param pattern 表达式 * @return 时间 */ public static LocalDateTime parseDateTime(String dateStr, String pattern) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); return DateTimeUtil.parseDateTime(dateStr, formatter); } /** * 将字符串转换为时间 * * @param dateStr 时间字符串 * @param formatter DateTimeFormatter * @return 时间 */ public static LocalDateTime parseDateTime(String dateStr, DateTimeFormatter formatter) { return LocalDateTime.parse(dateStr, formatter); } /** * 将字符串转换为时间 * * @param dateStr 时间字符串 * @return 时间 */ public static LocalDateTime parseDateTime(String dateStr) { return DateTimeUtil.parseDateTime(dateStr, DateTimeUtil.DATETIME_FORMAT); } /** * 将字符串转换为时间 * * @param dateStr 时间字符串 * @param pattern 表达式 * @return 时间 */ public static LocalDate parseDate(String dateStr, String pattern) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); return DateTimeUtil.parseDate(dateStr, formatter); } /** * 将字符串转换为时间 * * @param dateStr 时间字符串 * @param formatter DateTimeFormatter * @return 时间 */ public static LocalDate parseDate(String dateStr, DateTimeFormatter formatter) { return LocalDate.parse(dateStr, formatter); } /** * 将字符串转换为日期 * * @param dateStr 时间字符串 * @return 时间 */ public static LocalDate parseDate(String dateStr) { return DateTimeUtil.parseDate(dateStr, DateTimeUtil.DATE_FORMAT); } /** * 将字符串转换为时间 * * @param dateStr 时间字符串 * @param pattern 时间正则 * @return 时间 */ public static LocalTime parseTime(String dateStr, String pattern) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); return DateTimeUtil.parseTime(dateStr, formatter); } /** * 将字符串转换为时间 * * @param dateStr 时间字符串 * @param formatter DateTimeFormatter * @return 时间 */ public static LocalTime parseTime(String dateStr, DateTimeFormatter formatter) { return LocalTime.parse(dateStr, formatter); } /** * 将字符串转换为时间 * * @param dateStr 时间字符串 * @return 时间 */ public static LocalTime parseTime(String dateStr) { return DateTimeUtil.parseTime(dateStr, DateTimeUtil.TIME_FORMAT); } /** * 时间转 Instant * * @param dateTime 时间 * @return Instant */ public static Instant toInstant(LocalDateTime dateTime) { return dateTime.atZone(ZoneId.systemDefault()).toInstant(); } /** * Instant 转 时间 * * @param instant Instant * @return Instant */ public static LocalDateTime toDateTime(Instant instant) { return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); } /** * 转换成 date * * @param dateTime LocalDateTime * @return Date */ public static Date toDate(LocalDateTime dateTime) { return Date.from(DateTimeUtil.toInstant(dateTime)); } /** * 比较2个时间差,跨度比较小 * * @param startInclusive 开始时间 * @param endExclusive 结束时间 * @return 时间间隔 */ public static Duration between(Temporal startInclusive, Temporal endExclusive) { return Duration.between(startInclusive, endExclusive); } /** * 比较2个时间差,跨度比较大,年月日为单位 * * @param startDate 开始时间 * @param endDate 结束时间 * @return 时间间隔 */ public static Period between(LocalDate startDate, LocalDate endDate) { return Period.between(startDate, endDate); } }