首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将DateTime对象转换为字符串

将DateTime对象转换为字符串
EN

Stack Overflow用户
提问于 2019-02-21 22:46:46
回答 5查看 792关注 0票数 0

我有一个简单的问题。如何将ISO-8601日期转换为字符串?我使用的日期格式如下:2019-02-05T08:21:15.000+01:00,并希望将此日期对象转换为字符串。我尝试了以下几种方法:

代码语言:javascript
复制
String startString = (String) jsonObjectMap2.get("created_on"); 
//startString = "2019-02-21T09:47:58.699004+00:00"`
代码语言:javascript
复制
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的正确形式是什么?希望您能帮助我,提前谢谢您。

EN

回答 5

Stack Overflow用户

发布于 2019-02-22 03:58:37

tl;dr

代码语言:javascript
复制
java.time.OffsetDateTime.parse( "2019-02-21T09:47:58.699004+00:00" )

java.time

DateTime是什么类?如果您正在使用Joda-Time,请知道Joda-Time项目现在处于维护模式。它的创建者Stephen Colbourne继续领导JSR310并实现了内置到Java语言中的java.time类。

不需要格式化模式

您的输入字符串为标准ISO 8601格式。在解析/生成字符串时,java.time类默认使用ISO8601格式。

代码语言:javascript
复制
String input = "2019-02-21T09:47:58.699004+00:00" ;  // Standard ISO 8601 format.

OffsetDateTime

您的输入字符串指示offset-from-UTC,但不是时区。因此,表示该值的适当类是OffsetDateTime

代码语言:javascript
复制
OffsetDateTime odt = OffsetDateTime.parse( input ) ;

关于java.time

框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参阅。和搜索堆栈溢出,以获得许多示例和解释。规范为JSR 310

现在在maintenance mode中的项目建议迁移到java.time类。

您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC driver。不需要字符串,也不需要java.sql.*类。

从哪里获取java.time类?

  • ,、、和更高版本-标准Java API的一部分,具有捆绑的实现。
    • Java9添加了一些次要功能和fixes.

  • 和.

中的

  • 大多数java.time功能已向后移植到Java6和7

    • 更高版本的Android捆绑实现的java.time类。
    • 对于较早的Android (<26),项目适配 (如上所述)。请参阅.

项目使用额外的类扩展了java.time。这个项目是未来可能添加到java.time中的试验场。您可能会在这里找到一些有用的类,如IntervalYearWeekYearQuartermore

票数 2
EN

Stack Overflow用户

发布于 2019-02-21 23:03:52

为什么不在DateTime对象上使用toString()呢?

票数 1
EN

Stack Overflow用户

发布于 2019-02-21 23:04:36

正如Thomas在评论中提到的,DateTime.format()使用Date对象,而不是DateTime对象;因此使用IllegalArgumentException。从日期的格式判断,您可以尝试使用内置的java.time.ZonedDateTime类解析startString

代码语言:javascript
复制
ZonedDateTime dateTime = ZonedDateTime.parse(startString) //it can parse ISO-8601 date-times

然后,可以使用java.time.DateTimeFormatter的静态ofPattern()方法格式化dateTime对象,该方法采用String模式应用于日期-时间,并以字符串形式返回格式化的日期:

代码语言:javascript
复制
String formattedDateTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ+|-hh:mm"));

编辑

正如Basil指出的那样,OP的DateTime对象包括一个时间偏移量,它不一定是时区偏移量--正如ZonedDateTime类所表示的那样。因此,在此场景中使用的最合适的类是OffsetDateTime,它提供相同的功能,但更适合给定的用例。请参阅Basil Bourque's answer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54809767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档