【发布时间】:2021-10-07 00:51:46
【问题描述】:
我有两个来自不同时区的日期:
String s1 = "2021-08-07T03:00:01-07:00";
String s2 = "2021-08-07T15:30:00+05:30";
我想比较两个日期。我正在解析如下日期:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss-hh:mm");
Date d = null;
try {
d = sdf.parse(s1);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(d);
如何使用字符串中提供的时区偏移将时区添加到日期?
【问题讨论】:
-
我建议使用
Instant::parse。一方面,它使用新的java.timeAPI。另一方面,Instant会自动处理时区。 -
您的代码当前失败的原因是模式不正确。
-
@Turing85
OffsetDateTime用于这些特定输入,而不是Instant。 -
@StephenC 那是因为
SimpleDateFormat太麻烦了。我们永远不应该使用它。 (现代的DateTimeFormatter也会失败,但有一个例外告诉我们出了点问题,这已经是向前迈出了一步。) -
@BasilBourque 一方面,
Instant.parse()确实适用于使用较新 Java 版本(11+?)的这些输入。另一方面,使用它当然意味着丢弃偏移信息,我们可能在某些时候想要将其用于其他目的,正如您所说,这是从一开始就使用OffsetDateTime的论据。