@@ -1,14 +1,12 @@
package com.imyeyu.utils ;
import com.imyeyu.java.TimiJava ;
import lombok.Getter ;
import java.text.SimpleDateFormat ;
import java.time.Instant ;
import java.time.LocalDate ;
import java.time.LocalDateTime ;
import java.time.ZoneId ;
import java.time.temporal.ChronoUnit ;
import java.util.Date ;
import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
@@ -77,6 +75,9 @@ public class Time {
/** 格式化 yyyy-MM-dd'T'HH:mm:ss */
public static final SimpleDateFormat dateTimeT = new SimpleDateFormat ( " yyyy-MM-dd'T'HH:mm:ss " ) ;
/** 格式化 yyyy-MM-dd HH:mm:ss */
public static final SimpleDateFormat serialize = new SimpleDateFormat ( " yyyyMMddHHmmss " ) ;
// ---------- 长整型时间戳 ----------
/** 1 秒时间戳 */
@@ -105,31 +106,6 @@ public class Time {
/** 1 天时间戳(整型) */
public static final int DI = HI * 24 ;
/**
* 计算两个时间戳精确的日期时间差
*
* @param begin 开始时间戳
* @param end 结束时间戳
* @return 时差
*/
public static Between between ( long begin , long end ) {
if ( end < begin ) {
throw new IllegalArgumentException ( " end time must greater than begin time: " + end + " < " + begin ) ;
}
LocalDateTime ldtBegin = toLocalDateTime ( begin ) ;
LocalDateTime ldtEnd = toLocalDateTime ( end ) ;
Between between = new Between ( ) ;
between . year = ( int ) ChronoUnit . YEARS . between ( ldtBegin , ldtEnd ) ;
between . month = ( int ) ChronoUnit . MONTHS . between ( ldtBegin , ldtEnd ) % 12 ;
between . day = ( int ) ChronoUnit . DAYS . between ( ldtBegin . plusMonths ( between . year * 12L + between . month ) , ldtEnd ) ;
between . hour = ( int ) ( ChronoUnit . HOURS . between ( ldtBegin , ldtEnd ) - ChronoUnit . DAYS . between ( ldtBegin , ldtEnd ) * 24 ) ;
between . minute = ( int ) ChronoUnit . MINUTES . between ( ldtBegin , ldtEnd ) % 60 ;
between . second = ( int ) ChronoUnit . SECONDS . between ( ldtBegin , ldtEnd ) % 60 ;
between . millis = ( int ) ( ( end - begin ) % 1000 ) ;
return between ;
}
/**
* 获取此刻毫秒
*
@@ -154,7 +130,11 @@ public class Time {
* @return 昨天零时时间戳
*/
public static long yesterday ( ) {
return today ( ) - D ;
return yesterday ( now ( ) ) ;
}
public static long yesterday ( long time ) {
return today ( time ) - D ;
}
/**
@@ -163,9 +143,11 @@ public class Time {
* @return 今天零时时间戳
*/
public static long today ( ) {
long now = now ( ) ;
final long H8 = H * 8 ;
return ( ( now + H8 - ( now + H8 ) % ( H * 24 ) ) - H8 ) ;
return today ( now ( ) ) ;
}
public static long today ( long time ) {
return Instant . ofEpochMilli ( time ) . atZone ( ZoneId . systemDefault ( ) ) . toLocalDate ( ) . atStartOfDay ( ZoneId . systemDefault ( ) ) . toInstant ( ) . toEpochMilli ( ) ;
}
/**
@@ -174,7 +156,11 @@ public class Time {
* @return 明天零时时间戳
*/
public static long tomorrow ( ) {
return today ( ) + D ;
return tomorrow ( now ( ) ) ;
}
public static long tomorrow ( long time ) {
return today ( time ) + D ;
}
/**
@@ -380,35 +366,4 @@ public class Time {
return String . format ( " %d:%02d:%02d.%03d " , h , s / 60 - h * 60 , s % 60 , millis % 1000 ) ;
}
}
/**
* 时差
*
* @author 夜雨
* @version 2022-10-12 14:46
*/
@Getter
public static class Between {
/** 年 */
int year ;
/** 月 */
int month ;
/** 天 */
int day ;
/** 小时 */
int hour ;
/** 分钟 */
int minute ;
/** 秒 */
int second ;
/** 毫秒 */
int millis ;
}
}