概述
一、背景
先说一下为什么要使用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时间格式的处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复