【发布时间】:2022-01-11 00:56:52
【问题描述】:
我正在学习 Java,遇到了这个问题。我有一个给定格式的日期字符串。
String dbTime = "01/01/1998 12:30:00";
final String DATE_FORMAT = "MM/dd/yyyy HH:mm:ss";
现在我想初始化/创建一个 UTC 时区的 Date 对象。 为此,我尝试了以下代码
SimpleDateFormat sdfAmerica = new SimpleDateFormat(DATE_FORMAT);
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
sdfAmerica.setTimeZone(utcTimeZone);
String sDateInAmerica = sdfAmerica.format(date); // Convert to String first
Date dateInAmerica = new Date();
try {
dateInAmerica = formatter.parse(sDateInAmerica); // Create a new Date object
} catch (ParseException e) {
e.printStackTrace();
}
这会将时间转换为 UTC,而不是仅仅创建一个日期对象。
01/02/1998 23:00:00
现在我很困惑哪种是转换时间的正确方法。 我有时间使用字符串格式,我必须将其转换为不同的格式,主要是 UTC 到 PST 或 PST 到 UTC。
经过一番研究,我找到了this 教程但无法获得预期的输出。
【问题讨论】:
-
你在 2021 年学习 Java 并尝试使用
SimpleDateFormat?! 停下!!马上! 我们其他人很多年前就停止使用那个类了,因为它太麻烦了。因为它的替代品Date和TimeZone在 7 年半前的 2014 年初推出了现代 Java 日期和时间 API java.time。 -
另外,
Date对象没有时区,因此不能(或不是)UTC。现代的OffsetDateTime或ZonedDateTime可以是un UTC。见the good answer by Roland Kreuzer。