我是靠谱客的博主 深情鸡翅,最近开发中收集的这篇文章主要介绍Java微服务对UTC时间格式的处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、背景

      先说一下为什么要使用UTC时间。开发一个全球化的系统,服务端(Java微服务)集中部署在同一个地方,用户在全球通过浏览器、手机客户端访问。不同地区的时区是不一样的,同一个时间戳,不同的用户看到的是不同的时间。

      对于服务端来讲,不应该去适配不同地方的不同时区。在Java服务后台及数据库中都应该使用唯一的UTC时间(一个long型的时间戳,单位是毫秒)。

      直接使用使用这个数字串存在一些问题。无论是写日志,还是存储到数据库都不直观,可读性差遇到问题定位麻烦,最好还是转换为我们常用的yyyy-MM-dd HH:mm:ss格式,只是对应的时区是UTC。

      UTC时区与中国大陆时区相比要晚8个小时。为了转换方便,封装了如下一个公共类,方便UTC时间的各种转换。

二、公共类

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/**
 * 
 * 日期处理公共类定义。
 * 
 * @author elon
 * @version 2018-02-11
 */
public class DateUtil {

    public DateUtil() {
    }

    /**
     * 定义UTC日期转换器。SimpleDateFormat不是线程安全的。
     */
    private static ThreadLocal<SimpleDateFormat> utcDateFormatter = new ThreadLocal<SimpleDateFormat>() {

        @Override
        protected SimpleDateFormat initialValue() {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            format.setTimeZone(TimeZone.getTimeZone("UTC"));
            return format;
        }
    };

    /**
     * 定义当前系统时间转换器。使用的时区为当前系统所在时区。
     */
    private static ThreadLocal<SimpleDateFormat> localDateFormatter = new ThreadLocal<SimpleDateFormat>() {

        @Override
        protected SimpleDateFormat initialValue() {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return format;
        }
    };

    /**
     * 将UTC日期转换为字符串形式。方便日志文件记录。
     * @param date 日期
     * @return yyyy-MM-dd HH:mm:ss格式的字符串
     */
    public static String toUTCDateString(Date date) {
        return utcDateFormatter.get().format(date);
    }

    /**
     * 将UTC时间戳转换为字符串格式。
     * 
     * @param timestamp 时间戳
     * @return yyyy-MM-dd HH:mm:ss格式的字符串
     */
    public static String timeStamp2UTCDateStr(long timestamp) {
        return toUTCDateString(new Date(timestamp));
    }

    /**
     * 获取当前utc时间
     * 
     * @return yyyy-MM-dd HH:mm:ss格式的utc时间字符串
     */
    public static String getCurrentUTC() {

        // Date本身是没有时区概念的.转换为字符串的过程中涉及时区信息。
        return toUTCDateString(new Date());
    }

    /**
     * 将日期转换为本地时间字符串。
     * @param date 日期对象
     * @return 字符串
     */
    public static String toLocalDateStr(Date date) {
        return localDateFormatter.get().format(date);
    }

    /**
     * 解析utc时间字符串,转换为Date对象
     * @param utcDateStr utc时间字符串,格式为:yyyy-MM-dd HH:mm:ss
     * @return Date
     * @throws ParseException 解析异常
     */
    public static Date toUTCDate(String utcDateStr) throws ParseException {
        return utcDateFormatter.get().parse(utcDateStr);
    }
}

最后

以上就是深情鸡翅为你收集整理的Java微服务对UTC时间格式的处理的全部内容,希望文章能够帮你解决Java微服务对UTC时间格式的处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(26)

评论列表共有 0 条评论

立即
投稿
返回
顶部