Java中的数据如何格式化程序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (97)

我使用下面的代码来格式化毫秒分辨率的日期字符串,适用2018-09-14T13:05:21.329Z但不是2018-09-14T13:05:21.3Z

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
SimpleDateFormat sdfDestination = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
    Date parsedDate = formatter.parse(date);
    String destDate = sdfDestination.format(parsedDate);
    return destDate;
} catch (java.text.ParseException parseException) {
    logger.error("Parse Exception occured while converting publication time to date "
            + "format 'yyyy-MM-dd HH:mm:ss'", parseException);
}

得到以下异常:

java.text.ParseException: Unparseable date: "2018-09-14T13:05:21.3Z"
    at java.text.DateFormat.parse(Unknown Source) ~[na:1.8.0_181]
    at com.noordpool.api.implementation.utility.Utility.parseDate(Utility.java:136) [classes/:na]
    at com.noordpool.api.implementation.utility.Utility.parseMessage(Utility.java:77) [classes/:na]
提问于
用户回答回答于

唯一的问题是你使用了错误的模式SimpleDateFormat,需要改变:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");

至:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
用户回答回答于

java.time

DateTimeFormatter dtfDestination = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss"); String date = "2018-09-14T13:05:21.3Z"; String destDate = Instant.parse(date) .atZone(ZoneId.of("Indian/Comoro")) .format(dtfDestination); System.out.println(destDate);

此代码段的输出是:

2018-09-14 16:05:21

如果没有恰好是Indian / Comoro,请替换正确的时区,因为正确的输出取决于使用正确的时区。如果要使用JVM的默认时区,请指定ZoneId.systemDefault(),但请注意,可以随时从程序的其他部分或在同一JVM中运行的其他程序更改默认值。

扫码关注云+社区

领取腾讯云代金券