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

一、背景

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

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

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

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

二、公共类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
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时间格式内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部