【发布时间】:2021-09-22 19:11:33
【问题描述】:
以下是尝试计算时区之间小时差的示例。
import java.util.*;
import java.text.*;
public class ForPosting
{
public static void main (String[] args)
{
try {
String myDateString = "07-13-2021 11:00:00";
SimpleDateFormat localDateTime = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
SimpleDateFormat utcDateTime = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
localDateTime.setTimeZone(TimeZone.getTimeZone("EET"));
System.out.println(localDateTime.parse(myDateString));
utcDateTime.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(utcDateTime.parse(myDateString));
float diff = ((localDateTime.parse(myDateString).getTime() - utcDateTime.parse(myDateString).getTime() ) / 3600000);
System.out.println("EET & UTC Time Difference : " + diff);
localDateTime.setTimeZone(TimeZone.getDefault());
System.out.println(localDateTime.parse(myDateString));
utcDateTime.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(utcDateTime.parse(myDateString));
diff = ((localDateTime.parse(myDateString).getTime() - utcDateTime.parse(myDateString).getTime() ) / 3600000);
System.out.println("Default & UTC Time Difference : " + diff);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上代码生成如下输出。
Default & UTC Time Difference : 4.0 通过检查当前日期得到确认,并确认有 4 小时的差异。
对 EET 和 UTC 进行相同的检查是不同的。
EET & UTC Time Difference : -3.0
输出显示有 3 小时的差异,但以下显示只有 2 小时。
为什么 EET 和 UTC 实际时间显示 2 小时时差,而 Java 代码显示 3 小时时差?
【问题讨论】:
-
Google 给您的结果具有误导性。请改用 EEST,它应该会给出该时区的实际时间,截至目前,在 Google 上。
-
谢谢,现在时间和小时差确实匹配了。
-
UTC很好,但不要使用其他时区缩写,如EET。改为传递完整的时区标识符,例如Europe/Sofia或使用 EET 的其他时区。见en.wikipedia.org/wiki/List_of_tz_database_time_zones -
我建议你不要使用
SimpleDateFormat和TimeZone。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的DateTimeFormatter和ZoneId。 -
Lais Bento 很有帮助地问,因为有疑问:可能是因为 EET 是夏季时间? 正如您在我的回答中看到的那样,这是一个非常好的问题,并且没有明确的答案。