以下语句在Java 7中是否有效?
Timestamp.valueOf("0000-00-00 00:00:00.000000");
因为使用JDK 1.6构建上面的代码工作得很好但是在使用JDK 1.7时也是如此:
时间戳格式必须为yyyy-mm-dd hh:mm:ss [.fffffffff]
答案 0 :(得分:3)
它是语法上有效的Java代码,但我不希望它在执行时工作:
我使用"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)都有效。