将字符串转换为“中的java.sql.Date对象”;YYYY“;格式
我想创建一个格式为“YYYY”的java.sql.Date对象。它应该只有一年的时间。我做了很多研究,但找不到一种方法。您需要创建一个将字符串转换为“中的java.sql.Date对象”;YYYY“;格式,java,date-formatting,date,Java,Date Formatting,Date,我想创建一个格式为“YYYY”的java.sql.Date对象。它应该只有一年的时间。我做了很多研究,但找不到一种方法。您需要创建一个java.util.Date,然后使用接受长的构造函数将其转换为java.sql.Date 例如: String year = "2018"; DateFormat format = new SimpleDateFormat("yyyy"); java.util.Date utilDate = format.parse(year); java.sql.Date
java.util.Date
,然后使用接受长
的构造函数将其转换为java.sql.Date
例如:
String year = "2018";
DateFormat format = new SimpleDateFormat("yyyy");
java.util.Date utilDate = format.parse(year);
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
然而,这并不是“仅仅一年”。Java中的日期总是有一个时间组件,所以这是不可能的——在我的示例中是“2018年1月1日00:00:00 GMT”。这是否足够接近你想要的,或者你能改进你的问题吗
此外,java.sql.Date
扩展了java.util.Date
,因此理想情况下,只要有可能,您就可以使用前者来满足Liskov替换原则。tl;博士
永远不要使用糟糕的java.sql.Date
类,它的设计很糟糕,存在多个缺陷
使用java.time.Year
对象或整数
myPreparedStatement.setObject( … , Year.of( 2018 ) ) ;
…或者,在代码的其他部分使用Year
时:
myPreparedStatement.setInt( … , Year.of( 2018 ).getValue() ) ;
java.time
现代解决方案使用多年前的java.time类取代了SimpleDateFormat
、java.util.date
、java.sql.date
等可怕的旧日期时间类
该类巧妙地表示年份值。在代码中使用此类可以确保类型安全,并使代码更加自我记录
解析字符串输入
Year y = Year.parse( "2018" ) ;
解析整数输入
Year y = Year.of( 2018 ) ; // Integer literal.
JDBC
从JDBC4.2开始,我们可以直接交换java.time类型
交换年份
对象
我不知道这是否包括MySQL中的Year
类和Year
数据类型。但是试一试。如果没有,请向JDBC驱动程序供应商发出功能请求以扩展支持。考虑到MySQL有一个明确的YEAR
类型,这似乎是一个合理的期望
myPreparedStatement.setObject( … , y ) ;
检索
Year y = myResultSet.getObject( … , Year.class ) ;
Year y = Year.of( myResultSet.getInt( … ) ) ; // Retrieve integer, convert to `Year` object.
交换整数
如果您的JDBC驱动程序不能直接使用java.time.Year
,请使用整数
myPreparedStatement.setInt( … , y.getValue() ) ; // Pass year as an integer number.
检索
Year y = myResultSet.getObject( … , Year.class ) ;
Year y = Year.of( myResultSet.getInt( … ) ) ; // Retrieve integer, convert to `Year` object.
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- Java9添加了一些次要功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(可能是重复的。虽然
假装只有一个日期,但它至少有一个日期,而不仅仅是一年。在幕后,它有一个毫秒预测的时间点。也就是说,该类有设计问题,而且已经过时很久了。不过,你绝对需要一个吗?我建议java.sql.Date
和/或来自java.time的year
,这是现代java日期和时间API。它们确实符合它们的名称,并且只保存名称所说的内容。上述两个类中都不能包含格式(但LocalDate
生成您似乎想要的格式)。实际上,我正在尝试将数据插入到“Year”类型的列中在使用JBOSS TEID的MySQL数据库中的一个表中。为了实现此TEID,需要sql date格式的数据。仅供参考,非常麻烦的旧日期时间类,例如,和Year.toString
,现在被内置于java 8和更高版本中的类所取代。请参阅。类JavaDoc告诉您忽略继承java.text.simpleDataFormat
和java.util.Date
之间的关系,这是由于糟糕的设计中的一个可怕的黑客攻击造成的。请注意,JDBC 4.2只定义了对java.sql.Date
,LocalDate
,LocalTime
,LocalDateTime
的支持,所有其他java.time类型都是驱动程序指定的c扩展。OffsetTime