4 回答

TA贡献1797条经验 获得超6个赞
java.time.OffsetDateTime.parse( "2019-02-21T09:47:58.699004+00:00" )
java.time
什么课DateTime
?如果您使用的是 Joda-Time,请知道 Joda-Time 项目现在处于维护模式。它的创建者 Stephen Colbourne 继续领导 JSR 310 并实现Java 中内置的java.time类。
无需格式化模式
您的输入字符串采用标准ISO 8601格式。java.time类在解析/生成字符串时默认使用 ISO 8601 格式。
String input = "2019-02-21T09:47:58.699004+00:00" ; // Standard ISO 8601 format.
OffsetDateTime
您的输入字符串表示与 UTC 的偏移量,但不是时区。所以表示这个值的合适的类是OffsetDateTime
.
OffsetDateTime odt = OffsetDateTime.parse( input ) ;

TA贡献2021条经验 获得超8个赞
正如托马斯在评论中提到的那样,DateTime.format()消费一个Date对象,而不是一个DateTime对象;因此IllegalArgumentException. 根据您的日期格式判断,您可以尝试startString使用内置java.time.ZonedDateTime类解析您的:
ZonedDateTime dateTime = ZonedDateTime.parse(startString) //it can parse ISO-8601 date-times
然后,您可以使用的静态方法格式化您的dateTime对象,该方法采用一种模式应用于您的日期时间并将格式化的日期作为字符串返回:java.time.DateTimeFormatterofPattern()String
String formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ+|-hh:mm"));
编辑
正如 Basil 指出的那样,OP 的DateTime对象包括一个时间偏移量,它不一定是时区偏移量——正如ZonedDateTime该类所表示的那样。因此,在此场景中使用的最合适的类是OffsetDateTime提供相同功能但更适合给定用例的类。

TA贡献1802条经验 获得超5个赞
我不确定这是否会解决您的问题,但是 mm 应该是大写的,即 MM,因为 MM 描述月份,而 mm 描述分钟。
看下面的代码:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ+|- hh:mm");

TA贡献1798条经验 获得超7个赞
我发现以下内容对我有用
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[XXX]");String formatted = zonedDateTime.format(dateTimeFormatter);
添加回答
举报