为了账号安全,请及时绑定邮箱和手机立即绑定

将 DateTime 对象转换为字符串

将 DateTime 对象转换为字符串

阿晨1998 2022-06-30 10:34:13
我有一个简单的问题。如何将 ISO-8601 日期转换为字符串?我正在使用具有以下格式的日期:2019-02-05T08:21:15.000+01:00并希望将此日期对象转换为字符串。我尝试了以下方法:String startString = (String) jsonObjectMap2.get("created_on"); //startString = "2019-02-21T09:47:58.699004+00:00"`DateTime start = ISODateTimeFormat.dateTimeParser().parseDateTime(startString);DateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd'T'hh:mm:ss.SSSZ+|-hh:mm"); String formatedStartString = dateFormat.format(start);`但我收到以下错误:java.lang.IllegalArgumentException:无法将给定对象格式化为日期。DateFormat 的正确格式是什么?我希望你能帮助我,提前谢谢你。
查看完整描述

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 ) ;


查看完整回答
反对 回复 2022-06-30
?
宝慕林4294392

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提供相同功能但更适合给定用例的类。


查看完整回答
反对 回复 2022-06-30
?
慕后森

TA贡献1802条经验 获得超5个赞

我不确定这是否会解决您的问题,但是 mm 应该是大写的,即 MM,因为 MM 描述月份,而 mm 描述分钟。

看下面的代码:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSZ+|- 
    hh:mm");


查看完整回答
反对 回复 2022-06-30
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我发现以下内容对我有用

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[XXX]");String formatted = zonedDateTime.format(dateTimeFormatter);


查看完整回答
反对 回复 2022-06-30
  • 4 回答
  • 0 关注
  • 308 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号