为什么我在Java中使用Joda时间错误地解析了这个日期时间字符串?

时间:2018-01-15 02:58:16

标签: java android datetime jodatime

我正在尝试使用Joda时间来解析从API响应到long(或Joda DateTime对象)的字符串日期时间,以便将其存储在数据库中。

2018-01-13T16:45:33.416400+00:00

现在我拥有的是:

DateTimeFormatter f = DateTimeFormat.forPattern("yyyy-MM-dd?HH:mm:ss.??????+??:??");

模式中有问号的部分我不知道该放什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

TL;博士

java.time.OffsetDateTime.parse( “2018-01-13T16:45:33.416400+00:00” ) 

微秒

您的输入字符串表示微秒。 Joda-Time限制为毫秒。所以,方形钉,圆孔。

java.time

使用Joda-Time的替代品,即java.time类。

OffsetDateTime

OffsetDateTime之类的java.time类具有纳秒分辨率,最多9位小数,超过你的微秒。

您的字符串恰好符合日期时间字符串格式的ISO 8601标准。在解析/生成字符串时,java.time类默认使用这些标准格式。因此无需指定格式化模式。

OffsetDateTime  odt = OffsetDateTime.parse( “2018-01-13T16:45:33.416400+00:00” ) ;

数据库

使用支持JDBC 4.2或更高版本的驱动程序,您可以直接与数据库交换java.time对象。

myPreparedStatement.setObject( … , odt.toInstant() ) ;

...和...

Instant instant = myResultSet.getObject( … , Instant.class ) ;

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?