奇怪的行为在java中使用新的Date()获得时间

SDR*_*yes 1 java time timezone

我们在服务器中记录了一些事件,我们获取每个事件的当前时间,实例化一个新的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");
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

JB *_*zet 6

鉴于您的SimpleDateFormat是一个公共静态字段,我想多个线程同时使用它.但SimpleDateFormat不是线程安全的:

日期格式未同步.建议为每个线程创建单独的格式实例.如果多个线程同时访问格式,则必须在外部进行同步.

同步其用途,或将其存储在ThreadLocal变量中,或每次创建一个新实例.

你得到的可能是由于同时使用SimpleDateFormat导致的一些竞争条件或其他线程相关的错误.