JAVA时间格式化工具类、UTC时间工具、默认时区格式化工具

部分功能演示

//解析yyyy-MM-dd HH:mm:ss格式时间
LocalDateTime parseTime = TimeUtils.parse("2023-02-02 00:00:00");
//获取UTC时间
LocalDateTime utcNow = TimeUtils.UTC.now();
//获取系统时区格式化字符串
String defaultZoneUTC = TimeUtils.Zone.getDefaultZoneUTC();

时间工具类代码

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
import java.util.TimeZone;

/**
 * 时间处理工具
 */
public final class TimeUtils {

    public static final String FULL_TIME_PATTERN = "yyyyMMddHHmmss";

    public static final String FULL_TIME_SPLIT_PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static final String TIME_SPLIT_PATTERN = "HH:mm:ss";

    public static final String MONTH_TIME_SPLIT_PATTERN = "yyyy-MM";

    public static final String MONTH_DAY_SPLIT_PATTERN = "MM-dd";


    /**
     * 字符串获转为时间(服务器时区)
     * @param timeStr 时间字符串
     * @param timeFormat 要转换的时间格式,如 yyyy-MM-dd HH:mm:ss
     * @return 转换后的时间(服务器时区)
     */
    public static LocalDateTime parse(String timeStr, String timeFormat) {
        return LocalDateTime.parse(timeStr, DateTimeFormatter.ofPattern(timeFormat));
    }

    /**
     * 字符串获转为时间(服务器时区)
     * @param timeStr 时间字符串
     * @return 转换后的时间(服务器时区)
     */
    public static LocalDateTime parse(String timeStr) {
        return LocalDateTime.parse(timeStr, DateTimeFormatter.ofPattern(FULL_TIME_SPLIT_PATTERN));
    }

    /**
     * UTC时间转换为时区时间
     * @param time utc时间
     * @param fromZone time参数的时区
     * @param toZone 转换后的时区
     * @return 转换后的时区时间
     */
    public static LocalDateTime toZone(LocalDateTime time, ZoneId fromZone, ZoneId toZone) {
        ZonedDateTime zonedDateTime = time.atZone(fromZone).withZoneSameInstant(toZone);
        return zonedDateTime.toLocalDateTime();
    }


    /**
     * 获取系统当前时间戳时间
     */
    public static long timestamp() {
        return System.currentTimeMillis();
    }

    /**
     * 时区时间转换为时间戳
     * @param time 时区时间
     * @param zone time的时区
     * @return 时间戳
     */
    public static long toTimestamp(LocalDateTime time, ZoneOffset zone) {
        return time.toInstant(zone).toEpochMilli();
    }


    /**
     * UTC时间工具类
     */
    public static class UTC {

        /**
         *获取当前UTC时间
         * */
        public static LocalDateTime now() {
            return LocalDateTime.now(ZoneOffset.UTC);
        }

        /**
         * 时区时间转换为UTC时间
         * @param time 要转换的时间
         * @param fromZone time参数的时区
         * @return UTC时间
         */
        public static LocalDateTime toUtc(LocalDateTime time, ZoneId fromZone) {
            ZonedDateTime zonedDateTime = time.atZone(fromZone).withZoneSameInstant(ZoneOffset.UTC);
            return zonedDateTime.toLocalDateTime();
        }

        /**
         * UTC时间转换为时区时间
         * @param utcTime utc时间
         * @param toZone 时区
         * @return 时区时间
         */
        public static LocalDateTime utcToZone(LocalDateTime utcTime, ZoneId toZone) {
            Objects.requireNonNull(utcTime, "utcTime");
            Objects.requireNonNull(toZone, "toZone");
            ZonedDateTime zonedDateTime = utcTime.atZone(ZoneOffset.UTC).withZoneSameInstant(toZone);
            return zonedDateTime.toLocalDateTime();
        }

        /**
         * 获取系统当前时间戳
         * @return 系统时间戳
         */
        public static long timestamp() {
            return System.currentTimeMillis();
        }

        /**
         * UTC时间转为时间戳
         * @param utcTime UTC时间
         * @return 时间戳
         */
        public static long toTimestamp(LocalDateTime utcTime) {
            return utcTime.toInstant(ZoneOffset.UTC).toEpochMilli();
        }

        /**
         * 字符串获转为UTC时间
         * @param timeStr 时间字符串
         * @param timeFormat 要转换的时间格式,如 yyyy-MM-dd HH:mm:ss
         * @return UTC时间
         */
        public static LocalDateTime parseUtc(String timeStr, String timeFormat) {
            return LocalDateTime.parse(timeStr, DateTimeFormatter.ofPattern(timeFormat)).atZone(ZoneOffset.UTC).toLocalDateTime();
        }

        /**
         * 字符串(yyyy-MM-dd HH:mm:ss)获转为UTC时间
         * @param timeStr 时间字符串
         * @return UTC时间
         */
        public static LocalDateTime parseUtc(String timeStr) {
            return LocalDateTime.parse(timeStr, DateTimeFormatter.ofPattern(FULL_TIME_SPLIT_PATTERN)).atZone(ZoneOffset.UTC).toLocalDateTime();
        }

    }

    /**
     * 时区工具类
     */
    public static class Zone {

        /**
         * 获取系统GMT时区字符串
         * @param full 是否生成完整格式字符串,如:GMT+08:00:00
         * @return GMT系统时区,如:UTC+08
         */
        public static String getDefaultZoneGMT(boolean full) {
            int offset = TimeZone.getDefault().getOffset(System.currentTimeMillis());
            int h = offset / 3600000;
            int hr = offset % 3600000;
            int m = hr / 60000;
            int mr = hr % 60000;
            int s = mr / 1000;
            StringBuilder gmt = new StringBuilder("GMT");
            gmt.append(offset >= 0 ? "+" : "-");
            gmt.append((h >= 10 ? h : ("0" + h)));
            if (m > 0 || s > 0 || full) gmt.append(":").append(m >= 10 ? m : ("0" + m));
            if (s > 0 || full) gmt.append(":").append(s >= 10 ? s : ("0" + s));
            return gmt.toString();
        }

        /**
         * 获取系统GMT时区字符串
         * @return GMT系统时区,如:UTC+08
         */
        public static String getDefaultZoneGMT() {
            return getDefaultZoneGMT(false);
        }

        /**
         * 获取系统UTC时区字符串
         * @param full 是否生成完整格式字符串,如:GMT+08:00:00
         * @return UTC系统时区,如:UTC+08
         */
        public static String getDefaultZoneUTC(boolean full) {
            int offset = TimeZone.getDefault().getRawOffset();
            int h = offset / 3600000;
            int hr = offset % 3600000;
            int m = hr / 60000;
            int mr = hr % 60000;
            int s = mr / 1000;
            StringBuilder gmt = new StringBuilder("UTC");
            gmt.append(offset >= 0 ? "+" : "-");
            gmt.append((h >= 10 ? h : ("0" + h)));
            if (m > 0 || s > 0 || full) gmt.append(":").append(m >= 10 ? m : ("0" + m));
            if (s > 0 || full) gmt.append(":").append(s >= 10 ? s : ("0" + s));
            return gmt.toString();
        }

        /**
         * 获取系统UTC时区字符串
         * @return UTC系统时区,如:UTC+08
         */
        public static String getDefaultZoneUTC() {
            return getDefaultZoneUTC(false);
        }
    }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值