Java 时区格式不正确 (yyyy-MM-dd'T'HH:mm:ssZ)



时区的格式不正确

String fromDate = "2022-10-14T10:00:00+0300";
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date = dateFormat.parse(fromDate);   
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(date));

当运行时,我得到我的本地区域

2022-10-14T12:30:00+0430

JavaDate没有时区和偏移量的概念,它实际上是自epoch以来的一个瞬间,当您toString()它时,它会无声地使用默认时区进行格式化。您已经有了关于遗留API的答案,所以我将发布一个关于java.time的答案,这是现代日期API,从java8开始就可用。

日期/时间的分析和格式化是用DateTimeFormatter完成的。输入字符串只包含偏移量,不包含时区,为了保留此信息,您需要将其解析为OffsetDateTime。

String fromDate = "2022-10-14T10:00:00+0300";
DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
OffsetDateTime dateTime = OffsetDateTime.parse(fromDate, parseFormatter);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
System.out.println(outputFormatter.format(dateTime));
//prints - 2022-10-14T10:00:00.000+0300
`   String fromDate = "2022-10-14T10:00:00+0300";
final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");

Date date = dateFormat.parse(fromDate);   
dateFormat.setTimeZone(TimeZone.getTimeZone("EAT"));
System.out.println(dateFormat.format(date));'

相关内容

最新更新