我试图使用字符串到时间戳转换提取对象形式的一般情况下的矢量。在这种情况下,mysql值的格式如下:"2022-06-29 10:08:22"但是当我打印字符串时,它具有以下格式:"2022-06-29T10:08:22"。这里,我们注意到输出包含一个"T"的性格。当我尝试使用时间戳转换时,我得到一个错误。
代码:
data = new Object[0][0];
data[0][0]=rs.getObject(0); TimeStamp
createTimestampt= Timestamp.valueOf((String)data[0][0]));
在本例中,是类java.sql.Timestamp?的过期日期。或者Where i missed ?
注意:对象rs是java.sql.ResultSet的实例。很明显,不包含所有的代码。但是问题的实质被讨论了。
谢谢
感谢br
您忘记提及列的数据类型。所以我不能告诉你该用哪一个。
:
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
……或者:
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
java.time
永远不要使用遗留类Timestamp
。它在几年前就被现代的java取代了。时间类。具体来说,由Instant
和OffsetDateTime
代替。
JDBC 4.2及以后版本要求JDBC驱动程序支持java。时间类。
OffsetDateTime
假设您正在访问数据类型类似于SQL标准类型TIMESTAMP WITH TIME ZONE
的列,则检索OffsetDateTime
。
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
写入数据库。
myPreparedStatement.setObject( … , odt ) ;
LocalDateTime
如果您访问的数据库列类型类似于SQL标准类型TIMESTAMP WITHOUT TIME ZONE
,则使用LocalDateTime
类。
格式你说:
mysql值的格式如下:"2022-06-29 10:08:22">
不,不准确。日期-时间类型的数据库列不是文本,因此没有格式。
您所看到的是生成为该列所表示的值的文本。
如果按照上面的指示检索OffsetDateTime
,则不涉及文本。
你可以从你的OffsetDateTime
对象生成文本。
- 标准ISO 8601格式,调用
toString
。 - 对于本地化格式,使用
DateTimeFormatter.ofLocalizedDateTime
。 - 自定义格式:
DateTimeFormatter.ofPattern
所有这些文本生成方法已经在Stack Overflow上讨论过很多次了。
你说:
在这里,我们注意到输出包含一个"T"性格。
带有T
的格式是由ISO 8601标准定义的。