Java JDK 6和;jdk7

Java JDK 6和;jdk7,java,timestamp,java-7,jdk1.6,Java,Timestamp,Java 7,Jdk1.6,以下语句在Java7中有效吗 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一

以下语句在Java7中有效吗

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代码,但我不希望它在执行时工作:

  • 0不是有效的月份
  • 0不是有效的月份日期
  • 0可能是有效的年份,也可能不是有效的年份,这取决于您的计算方式。(它似乎可以与JDK 7一起使用,但我自己不会使用它。)
我会使用
“0001-01-01 00:00:00.000000”
——它不会引发异常。当然,如果你真的真的需要这样的东西——如果这是一个在没有“真实”数据的情况下使用的神奇值,也许你需要一个可为空的列来代替?

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

因此,如果MM和dd中的任何一个为00,它将抛出此异常。
异常消息具有误导性,IMHO
(我的意思是如果它说:
运行时的“无效月份”/“无效月日”)

请注意,如果指定此选项:

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)在内部都有效时。
是,它是有效的(在编译时)。而且已经是这种格式了。
但这并不排除您在运行时遇到一些问题的选项

因此,如果MM和dd中的任何一个为00,它将抛出此异常。
异常消息具有误导性,IMHO
(我的意思是如果它说:
运行时的“无效月份”/“无效月日”)

请注意,如果指定此选项:

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)都有效时,在内部执行。
时间戳
类的规范在Java 6和Java 7之间发生了更改

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

抛出:

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


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

在Java 6和Java 7之间,
Timestamp
类的规范发生了变化

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

抛出:

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


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

它在编译时有效,但在执行时无效-因此出现异常。“我同意这个问题有点困惑,但这并不意味着根本原因在别处……”JonSkeet同意。答案现在略有改变。它在编译时有效,但在执行时无效-因此出现异常。“我同意这个问题有点困惑,但这并不意味着根本原因在别处……”JonSkeet同意。答案现在有点变了。那是怎么编辑的?现在这是一个不同的问题@KesaVan,你怎么知道这是OP想要问的?编辑是怎么回事?现在这是一个不同的问题@KesaVan,你怎么知道OP想问这个问题?+1值得注意的是,公历和事实上的数字
0
在一千多年后不会被使用。日期在当时没有任何意义。@PeterLawrey:虽然这是真的,但有大量的主题日历-这不一定是一个无意义的值,只是它需要更清晰。“0001-01-01 00:00:00.000000”-我使用了这个,我的代码现在运行得很好。+1值得注意的是,公历和事实上的数字
0
将不会在一千多年后使用。日期在当时没有任何意义。@PeterLawrey:虽然这是真的,但有很多预想的日历-不一定是一个无意义的值,只是它需要更清晰。“0001-01-01 00:00:00.000000”-我使用了它,我的代码现在运行得很好。