| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548 |
- package com.ydtech.utils;
- import cn.hutool.core.collection.CollUtil;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.time.*;
- import java.time.format.DateTimeFormatter;
- import java.time.temporal.ChronoField;
- import java.time.temporal.ChronoUnit;
- import java.time.temporal.TemporalAccessor;
- import java.time.temporal.TemporalAdjusters;
- import java.util.*;
- /**
- * 日期时间工具类 后期替换DateUtil工具类
- *
- * @author lig
- */
- public class DateTimeUtil {
- /**
- * 显示年月日时分秒,例如 2015-08-11 09:51:53.
- */
- public static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
- /**
- * 显示年月日时分,例如 2015-08-11 09:51.
- */
- public static final String DATETIME_PATTERN_EXT1 = "yyyy-MM-dd HH:mm";
- /**
- * 仅显示年月日,例如 2015-08-11.
- */
- public static final String DATE_PATTERN = "yyyy-MM-dd";
- /**
- * 仅显示时分秒,例如 09:51:53.
- */
- public static final String TIME_PATTERN = "HH:mm:ss";
- /**
- * 显示年月日时分秒(无符号),例如 20150811095153.
- */
- public static final String UNSIGNED_DATETIME_PATTERN = "yyyyMMddHHmmss";
- /**
- * 显示年月日时分秒(无符号) 扩展1,例如 201508110951.
- */
- public static final String UNSIGNED_DATETIME_PATTERN_EXT1 = "yyyyMMddHHmm";
- /**
- * 仅显示年月日(无符号),例如 20150811.
- */
- public static final String UNSIGNED_DATE_PATTERN = "yyyyMMdd";
- /**
- * 获取当前日期和时间字符串.
- *
- * @return String 日期时间字符串,例如 2015-08-11 09:51:53
- */
- public static String getLocalDateTimeStr() {
- return format(LocalDateTime.now(), DATETIME_PATTERN);
- }
- /**
- * 获取当前日期字符串.
- *
- * @return String 日期字符串,例如2015-08-11
- */
- public static String getLocalDateStr() {
- return format(LocalDate.now(), DATE_PATTERN);
- }
- /**
- * 获取当前时间字符串.
- *
- * @return String 时间字符串,例如 09:51:53
- */
- public static String getLocalTimeStr() {
- return format(LocalTime.now(), TIME_PATTERN);
- }
- /**
- * 获取当前星期字符串.
- *
- * @return String 当前星期字符串,例如 星期二
- */
- public static String getDayOfWeekStr() {
- return format(LocalDate.now(), "E");
- }
- /**
- * 获取日期时间字符串
- *
- * @param temporal 需要转化的日期时间
- * @param pattern 时间格式
- * @return String 日期时间字符串,例如 2015-08-11 09:51:53
- */
- public static String format(TemporalAccessor temporal, String pattern) {
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
- return dateTimeFormatter.format(temporal);
- }
- /**
- * 日期时间字符串转换为日期时间(java.time.LocalDateTime)
- *
- * @param localDateTimeStr 日期时间字符串
- * @param pattern 日期时间格式 例如DATETIME_PATTERN
- * @return LocalDateTime 日期时间
- */
- public static LocalDateTime parseLocalDateTime(String localDateTimeStr, String pattern) {
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
- return LocalDateTime.parse(localDateTimeStr, dateTimeFormatter);
- }
- /**
- * 日期字符串转换为日期(java.time.LocalDate)
- *
- * @param localDateStr 日期字符串
- * @param pattern 日期格式 例如DATE_PATTERN
- * @return LocalDate 日期
- */
- public static LocalDate parseLocalDate(String localDateStr, String pattern) {
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
- return LocalDate.parse(localDateStr, dateTimeFormatter);
- }
- /**
- * 日期字符串转换为 日期字符串
- *
- * @param localDateStr 日期字符串
- * @param pattern 日期格式 例如DATE_PATTERN
- * @return String 日期
- */
- public static String parseLocalDateToString(String localDateStr, String pattern) {
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
- return LocalDate.parse(localDateStr, dateTimeFormatter).toString();
- }
- /**
- * 日期字符串转换为 日期字符串 前一天
- *
- * @param localDateStr 日期字符串
- * @param pattern 日期格式 例如DATE_PATTERN
- * @return String 日期
- */
- public static String parseLocalDateToStringFrontOne(String localDateStr, String pattern) {
- DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);
- LocalDate date = LocalDate.parse(localDateStr,dateTimeFormatter);
- LocalDate yesterday = date.plusDays(-1);
- return yesterday.toString();
- }
- /**
- * 获取指定日期时间加上指定数量日期时间单位之后的日期时间.
- *
- * @param localDateTime 日期时间
- * @param num 数量
- * @param chronoUnit 日期时间单位
- * @return LocalDateTime 新的日期时间
- */
- public static LocalDateTime plus(LocalDateTime localDateTime, int num, ChronoUnit chronoUnit) {
- return localDateTime.plus(num, chronoUnit);
- }
- /**
- * 获取指定日期时间减去指定数量日期时间单位之后的日期时间.
- *
- * @param localDateTime 日期时间
- * @param num 数量
- * @param chronoUnit 日期时间单位
- * @return LocalDateTime 新的日期时间
- */
- public static LocalDateTime minus(LocalDateTime localDateTime, int num, ChronoUnit chronoUnit) {
- return localDateTime.minus(num, chronoUnit);
- }
- /**
- * 根据ChronoUnit计算两个日期时间之间相隔日期时间
- *
- * @param start 开始日期时间
- * @param end 结束日期时间
- * @param chronoUnit 日期时间单位
- * @return long 相隔日期时间
- */
- public static long getChronoUnitBetween(LocalDateTime start, LocalDateTime end, ChronoUnit chronoUnit) {
- return Math.abs(start.until(end, chronoUnit));
- }
- /**
- * 根据ChronoUnit计算两个日期之间相隔年数或月数或天数
- *
- * @param start 开始日期
- * @param end 结束日期
- * @param chronoUnit 日期时间单位,(ChronoUnit.YEARS,ChronoUnit.MONTHS,ChronoUnit.WEEKS,ChronoUnit.DAYS)
- * @return long 相隔年数或月数或天数
- */
- public static long getChronoUnitBetween(LocalDate start, LocalDate end, ChronoUnit chronoUnit) {
- return Math.abs(start.until(end, chronoUnit));
- }
- /**
- * 获取本年第一天的日期字符串
- *
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getFirstDayOfYearStr() {
- return getFirstDayOfYearStr(LocalDateTime.now());
- }
- /**
- * 获取本年最后一天的日期字符串
- *
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfYearStr() {
- return getLastDayOfYearStr(LocalDateTime.now());
- }
- /**
- * 获取指定日期当年第一天的日期字符串
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getFirstDayOfYearStr(LocalDateTime localDateTime) {
- return getFirstDayOfYearStr(localDateTime, DATETIME_PATTERN);
- }
- /**
- * 获取指定日期当年最后一天的日期字符串
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfYearStr(LocalDateTime localDateTime) {
- return getLastDayOfYearStr(localDateTime, DATETIME_PATTERN);
- }
- /**
- * 获取指定日期当年第一天的日期字符串,带日期格式化参数
- *
- * @param localDateTime 指定日期时间
- * @param pattern 日期时间格式
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getFirstDayOfYearStr(LocalDateTime localDateTime, String pattern) {
- return format(localDateTime.withDayOfYear(1).withHour(0).withMinute(0).withSecond(0), pattern);
- }
- /**
- * 获取指定日期当年最后一天的日期字符串,带日期格式化参数
- *
- * @param localDateTime 指定日期时间
- * @param pattern 日期时间格式
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfYearStr(LocalDateTime localDateTime, String pattern) {
- return format(localDateTime.with(TemporalAdjusters.lastDayOfYear()).withHour(23).withMinute(59).withSecond(59), pattern);
- }
- /**
- * 获取本月第一天的日期字符串
- *
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getFirstDayOfMonthStr() {
- return getFirstDayOfMonthStr(LocalDateTime.now());
- }
- /**
- * 获取本月最后一天的日期字符串
- *
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfMonthStr() {
- return getLastDayOfMonthStr(LocalDateTime.now());
- }
- /**
- * 获取指定日期当月第一天的日期字符串
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getFirstDayOfMonthStr(LocalDateTime localDateTime) {
- return getFirstDayOfMonthStr(localDateTime, DATETIME_PATTERN);
- }
- /**
- * 获取指定日期当月最后一天的日期字符串
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfMonthStr(LocalDateTime localDateTime) {
- return getLastDayOfMonthStr(localDateTime, DATETIME_PATTERN);
- }
- /**
- * 获取指定日期当月第一天的日期字符串,带日期格式化参数
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getFirstDayOfMonthStr(LocalDateTime localDateTime, String pattern) {
- return format(localDateTime.withDayOfMonth(1).withHour(0).withMinute(0).withSecond(0), pattern);
- }
- /**
- * 获取指定日期当月最后一天的日期字符串,带日期格式化参数
- *
- * @param localDateTime 指定日期时间
- * @param pattern 日期时间格式
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfMonthStr(LocalDateTime localDateTime, String pattern) {
- return format(localDateTime.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59), pattern);
- }
- /**
- * 获取本周第一天的日期字符串
- *
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getFirstDayOfWeekStr() {
- return getFirstDayOfWeekStr(LocalDateTime.now());
- }
- /**
- * 获取本周最后一天的日期字符串
- *
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfWeekStr() {
- return getLastDayOfWeekStr(LocalDateTime.now());
- }
- /**
- * 获取指定日期当周第一天的日期字符串,这里第一天为周一
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getFirstDayOfWeekStr(LocalDateTime localDateTime) {
- return getFirstDayOfWeekStr(localDateTime, DATETIME_PATTERN);
- }
- /**
- * 获取指定日期当周最后一天的日期字符串,这里最后一天为周日
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfWeekStr(LocalDateTime localDateTime) {
- return getLastDayOfWeekStr(localDateTime, DATETIME_PATTERN);
- }
- /**
- * 获取指定日期当周第一天的日期字符串,这里第一天为周一,带日期格式化参数
- *
- * @param localDateTime 指定日期时间
- * @param pattern 日期时间格式
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getFirstDayOfWeekStr(LocalDateTime localDateTime, String pattern) {
- return format(localDateTime.with(DayOfWeek.MONDAY).withHour(0).withMinute(0).withSecond(0), pattern);
- }
- /**
- * 获取指定日期当周最后一天的日期字符串,这里最后一天为周日,带日期格式化参数
- *
- * @param localDateTime 指定日期时间
- * @param pattern 日期时间格式
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getLastDayOfWeekStr(LocalDateTime localDateTime, String pattern) {
- return format(localDateTime.with(DayOfWeek.SUNDAY).withHour(23).withMinute(59).withSecond(59), pattern);
- }
- /**
- * 获取今天开始时间的日期字符串
- *
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getStartTimeOfDayStr() {
- return getStartTimeOfDayStr(LocalDateTime.now());
- }
- /**
- * 获取今天结束时间的日期字符串
- *
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getEndTimeOfDayStr() {
- return getEndTimeOfDayStr(LocalDateTime.now());
- }
- /**
- * 获取指定日期开始时间的日期字符串
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 00:00:00
- */
- public static String getStartTimeOfDayStr(LocalDateTime localDateTime) {
- return getStartTimeOfDayStr(localDateTime, DATETIME_PATTERN);
- }
- /**
- * 获取指定日期结束时间的日期字符串
- *
- * @param localDateTime 指定日期时间
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getEndTimeOfDayStr(LocalDateTime localDateTime) {
- return getEndTimeOfDayStr(localDateTime, DATETIME_PATTERN);
- }
- /**
- * 获取指定日期开始时间的日期字符串,带日期格式化参数
- *
- * @param localDateTime 指定日期时间
- * @param pattern 日期时间格式
- * @return String 格式:yyyy-MM-dd HH:mm:ss
- */
- public static String getStartTimeOfDayStr(LocalDateTime localDateTime, String pattern) {
- return format(localDateTime.withHour(0).withMinute(0).withSecond(0), pattern);
- }
- /**
- * 获取指定日期结束时间的日期字符串,带日期格式化参数
- *
- * @param localDateTime 指定日期时间
- * @param pattern 日期时间格式
- * @return String 格式:yyyy-MM-dd 23:59:59
- */
- public static String getEndTimeOfDayStr(LocalDateTime localDateTime, String pattern) {
- return format(localDateTime.withHour(23).withMinute(59).withSecond(59), pattern);
- }
- /**
- * date1 是否大于 date2
- * @param date1 格式yyyy-MM-dd HH:mm:ss
- * @param date2 格式 yyyyMM 或 yyyy
- *
- * @author: lig
- * @date: 2023年09月06日 0006
- */
- public static boolean dateIsAfter(String date1,String date2) {
- if(StringUtils.isEmpty(date2)) return false;
- // String dateStr = "2018-06-20 00:00:00";
- // String dateStr2 = "201806";
- if(date2.length() < 5)date2 = date2 + "0101";
- if(date2.length() < 7)date2 = date2 +"01";
- LocalDate lRegisterDate = DateTimeUtil.parseLocalDate(date1, DateTimeUtil.DATE_PATTERN);
- LocalDate lVehicleYearDate = DateTimeUtil.parseLocalDate(date2, DateTimeUtil.UNSIGNED_DATE_PATTERN);
- // System.err.println("注册日期:"+lRegisterDate);
- // System.err.println("上市日期:"+lVehicleYearDate);
- return lVehicleYearDate.isBefore(lRegisterDate);
- }
- /**
- * 一天内 true 时间大于00:00:00 小于23:59:59
- * @param dateTime
- *
- * @author: lig
- * @date: 2023年09月11日 0011
- */
- public static boolean inOneDay(LocalDateTime dateTime){
- // LocalDateTime sDateTime = parseLocalDateTime(dateTime,DATETIME_PATTERN);
- LocalDateTime minTime = LocalDateTime.of(dateTime.toLocalDate(), LocalTime.MIN);
- LocalDateTime maxTime = LocalDateTime.of(dateTime.toLocalDate(), LocalTime.MAX);
- if(dateTime.isAfter(minTime) && dateTime.isBefore(maxTime)){
- // System.err.println("时间大于0点 小于23.59:"+sDateTime.isAfter(minTime));
- return true;
- }
- return false;
- }
- public static void main(String[] args) throws ParseException {
- List list = null;
- System.out.println(CollUtil.isEmpty(list));
- System.out.println("222:"+list.isEmpty());
- String dateStr = "2023-10-02 23:59:59";
- LocalDateTime sDateTime = parseLocalDateTime(dateStr,DATETIME_PATTERN);
- System.out.println("前一年:"+ DateTimeUtil.parseLocalDateToString(sDateTime.minusYears(1).toString(), DateTimeUtil.DATETIME_PATTERN));
- // LocalDateTime one = ;
- // String dateStr = "2018-06-20 23:59:59";
- //
- // LocalDateTime sDateTime = parseLocalDateTime(dateStr,DATETIME_PATTERN);
- //
- // LocalDateTime minTime = LocalDateTime.of(sDateTime.toLocalDate(), LocalTime.MIN);
- //
- // LocalDateTime maxTime = LocalDateTime.of(sDateTime.toLocalDate(), LocalTime.MAX);
- //
- // System.err.println("000:"+maxTime.toString());
- //
- // System.err.println("2222:"+sDateTime.isBefore(maxTime));
- //
- //
- // if(sDateTime.isAfter(minTime) && sDateTime.isBefore(maxTime)){
- // System.err.println("时间大于0点 小于23.59:"+sDateTime.isAfter(minTime));
- //
- // }
- // String dateStr2 = "201806";
- // if(dateStr2.length() < 7)dateStr2 = dateStr2 +"01";
- //// String aaa = DateTimeUtil.parseLocalDateToString(dateStr, DateTimeUtil.DATETIME_PATTERN);
- //// System.out.println("aaaa: " + aaa);
- //
- //
- // LocalDate lRegisterDate = DateTimeUtil.parseLocalDate(dateStr, DateTimeUtil.DATETIME_PATTERN);
- // LocalDate lVehicleYearDate = DateTimeUtil.parseLocalDate(dateStr2, DateTimeUtil.UNSIGNED_DATE_PATTERN);
- //
- // if(lVehicleYearDate.isAfter(lRegisterDate)){
- //
- // }
- //
- // System.err.println("注册日期:"+lRegisterDate);
- // System.err.println("上市日期:"+lVehicleYearDate);
- }
- }
|