首页 > 解决方案 > 在 Java 中使用 java.util.Date 进行不同的时间转换

问题描述

我正在使用java.util.DateJava中的类将以下代码用于纪元到时间的转换。

Long scheduledTime = 1602258300000L;
Date date = new Date(scheduledTime);
System.out.println("Date obj :" + date);

以下是在两个不同时区服务器上运行相同代码时的输出:

在 EDT 服务器上-

Date obj :Fri Oct 09 11:45:00 EDT 2020

在 IST 服务器上 -

Date obj :Fri Oct 09 21:15:00 IST 2020

为什么会这样?我只经过几毫秒。该数据应该在所有服务器上被视为 21:15。为什么 Date 类会更改数据?

请分享一段示例代码,以获取相同的时间数据,而不管服务器的时区如何。

标签: javajava.util.date

解决方案


一个Date对象代表一个特定的时刻,用自 Unix 纪元以来的给定毫秒数表示。

toString()方法将该时刻转换为基于默认时区的本地时间。这并不是说Date值本身“有”一个时区——它只是toString()使用了默认的时区。

该数据应该在所有服务器上被视为 21:15。

这表明您希望在所有服务器中使用印度时区,至少在转换即时时间以进行显示时。在不了解您的应用程序的任何其他信息的情况下,我们只能说......除了“不要使用java.util.Dateor java.util.Calendar; 改用java.time类”。它们的设计要好得多,而且您遇到此类问题的可能性较小。


推荐阅读