繁体   English   中英

JDK 6和JDK 7之间的有效时间戳记差异

[英]Valid TimeStamp difference between JDK 6 & JDK 7

以下语句在Java 7中有效吗?

Timestamp.valueOf("0000-00-00 00:00:00.000000");

因为使用JDK 1.6构建上面的代码可以正常工作,但是在使用JDK 1.7进行相同操作时,我得到了:

时间戳记格式必须为yyyy-mm-dd hh:mm:ss [.fffffffff]

它在语法上是有效的Java代码,但我不希望它在执行时起作用:

  • 0不是有效月份
  • 0不是有效的月份
  • 0可能是有效的年份,也可能不是有效的年份,具体取决于您计算事物的方式。 (它似乎可以在JDK 7中使用,但我自己不会使用它。)

我会使用"0001-01-01 00:00:00.000000" -这不会引发异常。 那当然是,如果您确实确实需要这种东西-如果在没有“真实”数据的情况下使用此魔术值,那么也许您需要一个可为空的列呢?

在Java 6和Java 7之间, Timestamp类的规范已更改。

从Javadoc中获取valueof方法(Java 7版本)

抛出:

IllegalArgumentException-如果给定参数的格式不为yyyy- [m] m- [d] d hh:mm:ss [.f ...]

但是Java 6 Javadoc中缺少这句话。 我认为这意味着Java 6 Timestamp类对可以传递给此方法的String更为宽容。

是的,它是有效的(在编译时)。 它已经是这种格式了。
但是,这并不排除您在运行时遇到一些问题的选项。

因此,如果MM和dd中的任何一个为00,它将引发此异常。
异常消息有点误导恕我直言
(我的意思是说:
在运行时显示“无效的月份” /“无效的月份”)。

请注意,如果您指定此:

Timestamp ts = Timestamp.valueOf("0000-01-01 00:00:00.000000");

解析的ts值实际上是

0001-01-01 00:00:00.000000

因此,为避免此类意外,我将确保
我指定一些有效的yyyy mm和dd值作为
似乎时间戳正在做一些转换,
在内部,当并非所有值(yyyy,mm,dd)都有效时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM