将 DateTime 对象转换为字符串

我有一个简单的问题。如何将 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 的正确格式是什么?我希望你能帮助我,提前谢谢你。


阿晨1998
浏览 309回答 4
4回答

互换的青春

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

宝慕林4294392

正如托马斯在评论中提到的那样,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()StringString formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ+|-hh:mm"));编辑正如 Basil 指出的那样,OP 的DateTime对象包括一个时间偏移量,它不一定是时区偏移量——正如ZonedDateTime该类所表示的那样。因此,在此场景中使用的最合适的类是OffsetDateTime提供相同功能但更适合给定用例的类。

慕后森

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

元芳怎么了

我发现以下内容对我有用DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS[XXX]");String formatted = zonedDateTime.format(dateTimeFormatter);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java