All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.acgist.snail.utils.DateUtils Maven / Gradle / Ivy

package com.acgist.snail.utils;

import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.Date;

/**
 * 

日期工具

* * @author acgist * @since 1.0.0 */ public class DateUtils { /** * UNIX和JAVA时间戳倍数 */ private static final int UNIX_JAVA_TIMESTAMP_SCALE = 1000; /** * 默认时间格式 */ private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss"; /** * 开始时间(1601年1月1日)北京时间(东八区)。 * 转换Java时间戳:11644473600000L + System.currentTimeMillis()。 */ private static final LocalDateTime WINDOW_BEIJIN_BEGIN_TIME = LocalDateTime.of(1601, 01, 01, 8, 00, 00); /** * Window系统时间和JAVA日期相差毫秒数。 */ private static final long WINDOW_JAVA_DIFF_TIMEMILLIS = 11644473600000L; private static final long ONE_MINUTE = 60L; private static final long ONE_HOUR = ONE_MINUTE * 60; private static final long ONE_DAY = ONE_HOUR * 24; /** *

时间格式化:保留两个时间单位。

* * @param second 时间,单位:秒 * * @return *

* 1.XX天XX小时
* 2.XX小时XX分钟
* 3.XX分钟XX秒 *

*/ public static final String formatSecond(long value) { final StringBuilder builder = new StringBuilder(); final long day = value / ONE_DAY; if(day != 0) { builder.append(day).append("天"); value = value - day * ONE_DAY; } final long hour = value / ONE_HOUR; if(hour != 0) { builder.append(hour).append("小时"); value = value - hour * ONE_HOUR; if(day != 0) { return builder.toString(); } } final long minute = value / ONE_MINUTE; if(minute != 0) { builder.append(minute).append("分钟"); value = value - minute * ONE_MINUTE; if(hour != 0) { return builder.toString(); } } builder.append(value).append("秒"); return builder.toString(); } /** * 时间格式化,格式:{@linkplain DateUtils#DEFAULT_PATTERN yyyy-MM-dd HH:mm:ss} */ public static final String dateToString(Date date) { return dateToString(date, DEFAULT_PATTERN); } /** * 日期格式化 * * @param date 日期 * @param pattern 格式 * * @return 格式化字符串 */ public static final String dateToString(Date date, String pattern) { if(date == null) { return null; } final SimpleDateFormat formater = new SimpleDateFormat(pattern); return formater.format(date); } /** * Java时间戳 */ public static final long javaTimestamp() { return System.currentTimeMillis(); } /** * Java时间戳转Unix时间戳 * * @param javaTimestamp Java时间戳 * * @return Unix时间戳 */ public static final long javaToUnixTimestamp(long javaTimestamp) { return javaTimestamp / UNIX_JAVA_TIMESTAMP_SCALE; } /** * Unix时间戳 */ public static final long unixTimestamp() { return javaToUnixTimestamp(javaTimestamp()); } /** * Unix时间戳转Java时间戳 * * @param unixTimestamp Unix时间戳 * * @return Java时间戳 */ public static final long unixToJavaTimestamp(long unixTimestamp) { return unixTimestamp * UNIX_JAVA_TIMESTAMP_SCALE; } /** * Unix时间戳转Java日期 * * @param unixTimestamp Unix时间戳 * * @return Java日期 */ public static final Date unixToJavaDate(long unixTimestamp) { return new Date(unixToJavaTimestamp(unixTimestamp)); } /** * 时间戳(微秒) */ public static final int timestampUs() { return (int) (System.nanoTime() / 1000); } /** *

Windows时间戳,开始时间(1601年1月1日)。

*

时间单位:微秒 * 10。

*

使用Java时间戳 + 相差时间戳计算。

*/ public static final long windowTimestamp() { return (WINDOW_JAVA_DIFF_TIMEMILLIS + System.currentTimeMillis()) * 10_000; } /** *

Windows时间戳,开始时间(1601年1月1日)。

*

时间单位:微秒 * 10。

*

使用时间差计算。

*/ public static final long windowTimestampEx() { return DateUtils.diff(WINDOW_BEIJIN_BEGIN_TIME, LocalDateTime.now()).toMillis() * 10_000; } /** * 时间相减 * * @param begin 开始时间 * @param end 结束时间 * * @return 相差时间 */ public static final Duration diff(LocalDateTime begin, LocalDateTime end) { return Duration.between(begin, end); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy