如何将DateTimeFormatter转换为时间戳sql formate

问题描述 投票:0回答:1

[我正在尝试使用JDBC将DateTimeFormatter插入到表Tab1中的时间戳记中,

String d="2020-03-19T21:19:32:921Z";
 DateTimeFormatter dateTimeFormatterUtc = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss:SSSr3");
 DateTime tD = dateTimeFormatterUtc.parseDateTime(d);
 I have set the date into my dao
 dao.setTRD(transactionOpenDateTime);


 String INSERT_AUDIT_SQL1= "insert into Tab1 (TD) value (?);";
 PreparedStatement preparedStatement = con.prepareStatement(INSERT_AUDIT_SQL1);
 preparedStatement.setDate(1,(Date) dao.getTRD().toDate());

我收到如下错误

java.lang.IllegalArgumentException: Invalid format: "2020-04-16T08:12:16.016+05:30[Asia/Calcutta]" is malformed at ".016+05:30[Asia/Calcutta]"
Exception in thread "main" java.lang.NullPointerException
    at com.manthan.dao.ConnectionDao.main(ConnectionDao.java:60)
java jdbc
1个回答
0
投票

您的示例输入与错误消息中显示的值不匹配。

您太努力了。您的两个示例值均符合ISO 8601标准。 java.time类在解析/生成文本时默认使用这些标准格式。因此,无需指定格式化模式。

Instant Instant = Instant.parse( "2020-03-19T21:19:32:921Z" ) ;

ZonedDateTime zdt = ZonedDateTime.parse( "2020-04-16T08:12:16.016+05:30[Asia/Calcutta]" ) ;

您似乎正在将与最早的Java版本捆绑在一起的旧式日期时间类与Joda-Time混合在一起。相反,您应该使用java.time类,该类正式取代了遗留类和Joda-Time。

而不是将[[java.time对象传递到java.util.Date。而不是将PreparedStatement::setDate传递给setObject

JDBC 4.2要求支持OffsetDateTime,但奇怪的是,不需要InstantZonedDateTime。因此转换。

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ; OffsetDateTime odt = zdt.toOffsetDateTime() ; myPreparedStatement.setObject( … , odt ) ;

© www.soinside.com 2019 - 2024. All rights reserved.