Java时间戳转换错误,从Mysql 8.26转换不正确



我试图使用字符串到时间戳转换提取对象形式的一般情况下的矢量。在这种情况下,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取代了。时间类。具体来说,由InstantOffsetDateTime代替。

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标准定义的。

最新更新