java sql日期时间
当我将SQLjava sql日期时间,java,date,jdbc,Java,Date,Jdbc,当我将SQLDateTime插入数据库时,我得到了2007-02-07 12:00:00.00 date.setYear(Integer.valueOf(parsedDate[2].replaceAll(" ", "")) - 1900); date.setMonth(Integer.valueOf(parsedDate[0].replaceAll(" ", ""))); date.setDate(Integer.valueOf(parsedDate[1].replaceAll(" ", "")
DateTime
插入数据库时,我得到了2007-02-07 12:00:00.00
date.setYear(Integer.valueOf(parsedDate[2].replaceAll(" ", "")) - 1900);
date.setMonth(Integer.valueOf(parsedDate[0].replaceAll(" ", "")));
date.setDate(Integer.valueOf(parsedDate[1].replaceAll(" ", "")));
...
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
但是我把日期做成这样:2007-02-07 17:29:46.00
date.setYear(Integer.valueOf(parsedDate[2].replaceAll(" ", "")) - 1900);
date.setMonth(Integer.valueOf(parsedDate[0].replaceAll(" ", "")));
date.setDate(Integer.valueOf(parsedDate[1].replaceAll(" ", "")));
...
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
如何获取数据库中秒数的值。它总是将其更改回12:00:00.00
date.setYear(Integer.valueOf(parsedDate[2].replaceAll(" ", "")) - 1900);
date.setMonth(Integer.valueOf(parsedDate[0].replaceAll(" ", "")));
date.setDate(Integer.valueOf(parsedDate[1].replaceAll(" ", "")));
...
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
我应该使用任何格式化程序吗?java.sql.Date表示日期,而不是日期和时间。发件人: 为了符合SQL日期的定义,必须通过将实例关联的特定时区中的小时、分钟、秒和毫秒设置为零来“规范化”java.SQL.DATE实例包装的毫秒值 如果要存储日期和时间,应查找其他类型-例如。编辑:这并不是说要使用时间戳列类型——正如paulsm4在评论中所说,这是另一回事。但是,据我所知,JDBC只支持:
(不,您也需要时间)日期
(不,您也需要日期)时间
(包括日期和时间,但您不需要时间戳SQL语义)时间戳
Timestamp
类型和DATETIME列来工作,尽管没有Timestamp
提供的精度级别
编辑:经过进一步的研究,您可能希望使用java.sql.Time
类型,但需要使用特殊的驱动程序参数-至少如果您使用的是Microsoft驱动程序。有关更多信息,请参阅上的这些文档。tl;博士
如果您不理解java.util.Date
是一个带有时间类型的日期,而其子类java.sql.Date
则假装是一个只包含日期的类,但实际上它的时间设置为零,那么您可能会感到困惑。糟糕透顶的设计。完全避免这两类。仅使用java.time类
对于数据库中的仅日期列,请将该列定义为SQL标准date
类型
myPreparedStatement.setObject(
… ,
LocalDateTime.parse( "2007-02-07 17:29:46.00".replace( " " , "T" ) )
.toLocalDate()
)
java.time
现代方法使用添加到Java8和更高版本中的java.time类
当我向数据库中插入SQL DateTime时,我得到2007-02-07 12:00:00.00
没有像DateTime
这样的SQL标准类型,Java中也没有这样的类。所以我不知道你在那里的意图
对于输入字符串,2007-02-07 17:29:46.00
,将其解析为LocalDateTime
,因为它没有任何时区或UTC偏移的指示符
这种SQL风格的格式几乎符合标准。要完全遵守,用“<代码> T < /代码>替换中间的空间。在解析/生成字符串时,java.time类默认使用ISO 8601格式
String input = "2007-02-07 17:29:46.00".replace( " " , "T" ) ;
解析
LocalDateTime ldt = LocalDateTime.parse( input ) ;
LocalDateTime
不代表一个时刻,也不是时间线上的一个点。它代表大约26-27小时范围内的潜在力矩
标准SQL确实为这样的值提供了一种数据类型,不带时区的时间戳
智能对象,而不是哑字符串
您的整个方法都是错误的,使用遗留的日期-时间类来争论文本。而是交换java.time对象
从JDBC4.2开始,您永远不需要使用麻烦的旧java.sql类型,例如java.sql.Date
或java.sql.Timestamp
。您可以通过setObject
/getObject
方法直接与数据库交换java.time对象
myPreparedStatement.setObject( … , ldt ) ;
和检索
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
如果您试图使用仅日期值,请使用SQL标准类型date
和Java类LocalDate
LocalDate ld = ldt.toLocalDate() ;
myPreparedStatement.setObject( … , ld ) ;
如何获取数据库中秒数的值
不知道你们所说的“秒值”是什么意思
也许您需要从UTC 1970年的第一刻算起的秒数
long secondsSinceEpoch = ldt.toEpochSecond() ;
如果您的目标仅仅是实例化一个java.sql.Date
,那就不用麻烦了。不要再使用那个类。但是,仅供参考,您的具体问题可能是该课程使用的糟糕设计的副作用。java.sql.Date
类继承自java.util.Date
,这是一个具有时间类型的日期。java.sql.Date
类假装是一个只包含日期的值,但实际上它的时间设置为00:00:00。更糟糕的是,文档告诉我们忽略它是一个子类的事实。不要费心去理解它;只需使用java.time即可
如果您试图单独使用一天中的时间,请提取一个LocalTime
对象
LocalTime lt = ldt.toLocalTime() ;
如果要将一天的时间设置为零,则可能需要仅日期的值。如果是这样,请使用LocalDate
类指定日期值,该值不包含日期时间和时区
LocalDate ld = ldt.toLocalDate() :
如果你真的想在那天的第一刻打电话给我
注意:如果您试图跟踪实际时刻、时间轴上的特定点,那么以上所有代码都是错误的。搜索堆栈溢出以了解Instant
、ZoneId
和zoneDateTime
类。搜索Stack Overflow和dba.StackExchange.com以了解带时区的SQL标准类型时间戳
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time函数