[我正在尝试使用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)
您的示例输入与错误消息中显示的值不匹配。
您太努力了。您的两个示例值均符合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
。
OffsetDateTime
,但奇怪的是,不需要Instant
或ZonedDateTime
。因此转换。 OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
OffsetDateTime odt = zdt.toOffsetDateTime() ;
myPreparedStatement.setObject( … , odt ) ;