JDK 6和&之间的有效TimeStamp差异。 JDK 7

时间:2014-01-01 11:11:01

标签: java timestamp java-7 jdk1.6

以下语句在Java 7中是否有效?

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

因为使用JDK 1.6构建上面的代码工作得很好但是在使用JDK 1.7时也是如此:

  

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

3 个答案:

答案 0 :(得分:3)

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

  • 0不是有效月份
  • 0不是有效的日期
  • 0可能是也可能不是有效年份,具体取决于您的计算方式。 (它似乎与JDK 7一起使用,但我不会自己使用它。)

我使用"0001-01-01 00:00:00.000000" - 不会抛出异常。那就是如果你真的,真的需要这样的东西,当然 - 如果在没有“真实”数据的情况下这是一个神奇的价值,你可能需要一个可以为空的列吗?

答案 1 :(得分:1)

{6}在Java 6和Java 7之间已经改变了Timestamp类的规范。

来自valueof方法的Javadoc(Java 7版本)

  

<强>抛出:

     

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

但Java 6 Javadoc中缺少这句话。我认为这意味着Java 6 Timestamp类对于可以传递给此方法的字符串更宽松。

答案 2 :(得分:0)

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

因此,如果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)都有效。