- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我应该使用java.util.Date还是java.sql.Date?
我有一个VisualFox数据库,并且已使用IntelliJ Idea向导使用适当的jdbc type 4驱动程序检索了实体。
ide(或驱动程序)已将日期字段创建为Timestamp。但是,日期字段不是时间戳而是日期字段,它们仅存储年,月和日。
所以我想知道是否应该切换到java.util.Date或java.sql.Date。乍一看,我认为java.sql.Date应该是适当的,但是它有许多方法被声明为不推荐使用。
最佳答案
tl; dr
Should I use java.util.Date or java.sql.Date?
DATE
的数据库类型,请使用java.time.LocalDate
。LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
myPreparedStatement.setObject( ld , … ) ;
TIMESTAMP WITH TIME ZONE
的数据库类型,请使用java.time.Instant
。Instant instant = myResultSet.getObject( … , Instant.class ) ;
myPreparedStatement.setObject( instant , … ) ;
00:00:00
的java.util.Date。
Class Date
java.lang.Object
java.util.Date ← Inherits from j.u.Date
java.sql.Date
…
A thin wrapper around a millisecond value that allows JDBC to identify this as an SQL DATE value. A milliseconds value represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT. ← Time-of-day set to Zero, midnight GMT/UTC
To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.
DATE
数据类型仅存储日期,而不存储日期。 java.util.Date
类,包含日期和时间),并将其扩展为将实例设置为午夜时间
UTC,
00:00:00
的实例。那个hack,是j.u.Date的子类,是
java.sql.Date
。
java.sql.Date
,因为它笨拙地试图掩盖其时间。 java.util.Date
。 LocalDate
类来仅表示日期,没有时间,也没有时区。
DATE
和
getObject
方法,则Java 8中的JDBC已透明更新,可以将SQL
setObject
值映射到新的java.time.LocalDate类型。
getObject
和
setObject
方法中添加了新的映射。
myPreparedStatement.setObject( … , myLocalDate ) ;
LocalDate myLocalDate = myResultSet.getObject( … , LocalDate.class ) ;
public java.time.instant toInstant()
public java.time.LocalDate toLocalDate()
public static java.sql.Date valueOf(java.time.LocalDate)
java.util.Date
,
java.sql.Date
和
java.sql.Timestamp
始终位于
UTC中。前两个(至少)在其源代码中埋藏着一个时区,但仅在诸如
equals
方法之类的表面下使用,并且没有getter/setter方法。
toString
方法应用了JVM当前的默认时区。因此,对于天真的程序员来说,似乎他们有一个时区,但没有。
toString
行为都是两个原因。
java.util.Date
替换为 java.time.Instant
java.sql.Timestamp
替换为 java.time.Instant
java.sql.Date
替换为 java.time.LocalDate
。 java.sql.Time
替换为 java.time.LocalTime
。 Instant
类表示
UTC在时间轴上的某个时刻,分辨率为
nanoseconds(十进制小数的九(9)位)。
java.time.Local…
类都缺少
time zone或
offset-from-UTC的任何概念。
java.util.Date
,
Calendar
和
SimpleDateFormat
。
java.sql.*
类。
Interval
,
YearWeek
,
YearQuarter
和
more。
关于java - 在java.util.Date或java.sql.Date之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24650186/
数据框有一个字符串类型的日期列 '2017-01-01' 它被转换为 DateType() df = df.withColumn('date', col('date_string').cast(Dat
这个问题在这里已经有了答案: What is "x && foo()"? (5 个答案) 关闭 8 年前。 我在 bootstrap-datepicker.js 文件中遇到过这个。 作者在_setD
我有一个数据库 utc 字符串,我正在传递到 Date(attrs.endDate),然后通过 new Date() 减去当前的 utc 日期,但我无法得到它来为我提供 2 个 utc 日期的正确差异
这个问题在这里已经有了答案: how to determine if 2 dates object equals each other? [duplicate] (3 个答案) 关闭 6 年前。 我
这个问题已经有答案了: How can I convert "/Date(1399739515000)/" into date format in JavaScript? (3 个回答) 已关闭 8
根据MDN ,我们只能将以下类型的参数传递给 Date 构造函数: new Date(); new Date(value); // Unix timestamp new Date(dateString
我从表中获取所有项目: endDate >= 现在 endDate 为 NULL published 等于 1。 这是我所拥有的,但它给了我 0 个项目: $items = Items::orderB
此查询需要很长时间才能完成。当我将 WHERE 子句设置为 new_dl >= '2014-01-01' 时,查询大约需要 6 分钟才能浏览大约 3 个月的数据。现在不知道为什么这个应该从 12 个月
我有一个正在为项目开发的小型 Java 程序,它使用 JavaMail 从指定的 URI 中提取用户的收件箱,然后开始处理消息。 在 Outlook 中,属性菜单中有一个功能可以设置邮件的到期日期,它
我想在获取 Date.getHours()、Date.getMinutes() 和 Date.getSeconds() 的值后格式化输出>. 这是一条漫长的路: var dt = new Date()
我发现java.text.DateFormat有两种格式化日期的方法。一种是采用 Date 参数,另一种是采用 Object 参数。我检查了DateFormat源代码,似乎他们调用了不同的内部方法。
我有两个对象,p4 和 p5,它们都具有 Date 属性。在某些时候,构造函数工作正常: p4.setClickDate(new Date(System.currentTimeMillis() - 8
我是使用 Sequelize 和 Node.js 的新手,但我的代码中存在日期比较问题。 User.findOne({ where: { resetToken: passwordToken,
我正在使用一个名为 fullcalendar 的 jquery 日历。当用户单击某一天时,他们将被发送到另一个页面以创建该天的事件。单击的日期作为 date 提供。然后通过下面的函数运行将其转换为 U
我有一个列表列表,每个列表中都有整数值,代表 8 年期间的日期。 dates = [[2014, 11, 14], [2014, 11, 13], ....., [2013, 12, 01]
我有两个表: 首先是TimeValues(示例) time | value 12/28/18 | 5.6 01/03/19 | 5.6 01/04/19 | 5.6 01/09/19 | 5.
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
像这样实例化的日期对象: new Date("2011-12-13") 返回一个认为自己是星期一的日期对象: Date {Mon Dec 12 2011 16:00:00 GMT-0800 (PST)
我需要选择入住日期和退房日期在指定日期范围之间的房价。这些费率根据其条件单独命名。房费取决于所选日期。这是我的代码: rate_eb rate_name rate_starts rat
我有 [Int64:[String:String]] 其中 Int64 是时间戳。如何检测和删除 [String:String] 中的参数之一是 ["name"] = "test" 并重复多次的同一天
我是一名优秀的程序员,十分优秀!