Java的sql.Date可以产生一个错误吗?

时间:2015-07-09 17:12:37

标签: java sql-server date

我有一个Date对象使用方法getTime来返回自1970年1月1日以来的毫秒数。

invoiceDate.getTime();

这些毫秒传递给java.sql.Date构造函数,如下所示:

new java.sql.Date( invoiceDate.getTime() );

结果是 yyyy-MM-dd 格式的日期。

现在我的问题是,java.sql.Date是否有可能产生一个错误?例如,假设 invoiceDate 设置为 Thu Jul 02 00:00:00 CDT 2015 ,那么java.sql.Date是否可能产生 2015- 07-01

3 个答案:

答案 0 :(得分:1)

没有。 Java日期不存储时区,因此您的invoiceDate和新日期对象相等。它在toString()中打印CDT,因为这是你的jvm

的时区

另请参阅Date.getTime()

的文档
  

返回自1970年1月1日00:00:00 GMT以来的毫秒数   由此Date对象表示。

for Date(long)

  

分配Date对象并初始化它以表示指定的对象   自标准基准时间以来被称为"的毫秒数   时代",即1970年1月1日00:00:00 GMT。

答案 1 :(得分:0)

没有。然而,它并不关心时区,这可能会产生一些问题。另请注意,数月从零开始计算,而天数则为1.

答案 2 :(得分:0)

6ton接受的答案是正确的。 java.util.Date和java.sql.Date上的toString方法将JVM的当前默认时区静默应用于UTC区域中的日期时间值。

java.time

这是许多的原因之一,以避免使用旧的java.util.Date/.Calendar和java.sql.Date。尝试使用Java 8及更高版本中的新java.time框架或第三方Joda-Time库来完成大部分工作。

如果您真正关心的是没有时间的日期,这意味着您的应用永远不会离开某个地区(时区),那么请使用仅限日期的课程。旧的日期时间类缺乏这个。 java.time和Joda-Time都提供了这样一个仅限日期的类,都叫做LocalDate

在StackOverflow上已多次讨论使用LocalDate这种方式。请搜索更多信息。

在java.util.Date源代码中实际上有一个深度分配的时区,但是在大多数情况下它会被忽略。混乱?是。然而另一个的理由是避免这些旧课程。