Java微服务对UTC时间格式的处理
2024-10-19 11:40:04
一、背景
先说一下为什么要使用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); } }
最新文章
- 关于div的滚动条滚动到底部,内容显示不全的问题。(已解决)
- jquery 巧用json传参
- A Simple Problem with Integers_树状数组
- Java开发第一步:JDK 7 安装及配置
- poj 1804 (nyoj 117)Brainman : 归并排序求逆序数
- iOS开发--动画(Animation)总结
- 继承在WCF中的问题和解决办法
- android 常用调用系统功能
- Protel99Se使用方法详解
- Windows PowerShell 简介
- Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序
- JAVA基础复习与总结<;十>; Ruannable和Callable
- linux中的shell脚本编程---初识shell
- flask狗书
- jenkins-参数化构建(二)插件:Extended Choice Parameter
- hadoop 动态调整mapred参数
- tp5 Excel导入
- 云存储的未来:Scale Up还是Scale Out?
- 02: flask 使用举例
- Redis 穿透和雪崩
热门文章
- nxlog4go 按天或按文件大小分割日志
- try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后?
- R学习笔记:了解R的使用
- MySQL的BlackHole引擎在主从架构中的作用
- RegexKitLite编译报错
- 【开源】C#.NET股票历史数据采集,【附18年历史数据和源代码】
- 从零开始学习前端JAVASCRIPT — 14、闭包与继承
- C#实现二分法查找算法
- ORACLE中修改表的Schema的总结
- Tomcat启动过程源码解读