gpt4 book ai didi

java - 在 java 中使用 new Date() 获取时间的奇怪行为

转载 作者:行者123 更新时间:2023-11-29 07:16:40 25 4
gpt4 key购买 nike

我们在服务器中记录一些事件,我们获取每个事件的当前时间,实例化一个新的 Date 对象。像这样 new Date()

但是昨天出了点问题。记录器显示该条目记录于 2012-01-21 14:06:04,但该事件的时间与 new Date() 不同,这一个: 2012-01-21 13:06:04

时差一小时

尽管如此,其他事件在此错误事件前后得到了正确的时间。

奖金

我们使用这个格式化程序记录事件:

// Of course, this means that we read our buggy timestamp like: '120121130604'
// but that's irrelevant :p
public static SimpleDateFormat messageDateTimeFormatter = new SimpleDateFormat("yyMMddHHmmss");

有什么想法吗?

最佳答案

鉴于您的 SimpleDateFormat 是一个公共(public)静态字段,我猜想多个线程正在同时使用它。但是SimpleDateFormat is not thread-safe :

Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.

同步它的使用,或者将它存储在一个ThreadLocal变量中,或者每次都创建一个新的实例。

由于并发使用 SimpleDateFormat,您得到的结果可能是由某些竞争条件或其他与线程相关的错误引起的。

关于java - 在 java 中使用 new Date() 获取时间的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8956568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com