时区的格式不正确
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));'