Java中不推荐使用Date(String s)的完全等价物?

我有旧代码使用new Date(dateString)来解析日期字符串。 编译代码会产生不推荐使用Date(java.lang.String) in java.util.Date has been deprecated的弃用警告Date(java.lang.String) in java.util.Date has been deprecated

javadoc无意中建议我使用DateFormat.parse() ,即使DateFormat类没有静态parse方法。

现在,我知道如何使用SimpleDateFormat ,但我想确保我得到的是depenedated Date构造函数的完全相同的行为

这是我的猜测(我发布为社区维基,所以如果我是对的,你可以投票):

 Date parsed; try { SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); parsed = format.parse(dateString); } catch(ParseException pe) { throw new IllegalArgumentException(pe); } 

SimpleDateFormat是要走的路。 但是,我是否可以指出,您可能不得不使用此方法定义一个SimpleDateFormat实例并构建Date对象。 如果您这样做,请注意SimpleDateFormat不是线程安全的,您可能会遇到一些可能难以调试的问题!

我建议借此机会来看看Joda ,这是一个更好的深思熟虑(和线程安全)API。 它构成了JSR-310的基础,JSR-310是新提出的Java Date API。

我明白这是一项更多的工作。 但是,鉴于您现在必须重构代码,这可能是值得的。

如果你看一下Nicolas提到的Date.parse(String s)方法的来源,你会发现很难或不可能构造一个完全重现行为的日期格式。

如果您只想消除警告,可以在调用Date(String)构造函数的方法之外放置@SuppressWarnings({“deprecation”})

如果您确实希望将来能够使用未来的JRE来访问此行为,那么您可以从JDK源中提取该方法并将其放入您自己的源中。 这需要仔细阅读源代码许可证并考虑其对特定项目的应用,并且可能根本不允许。

DateFormat具有返回DateFormat实例的静态方法。 我不知道哪一个(如果有的话)与Date(String s)具有相同的行为,但是你在这里:

 DateFormat.getInstance() DateFormat.getDateInstance() DateFormat.getTimeInstance() DateFormat.getDateTimeInstance() 

简短回答(在进一步调查之前)是:不,它不等同。 Date(String toParse)构造函数等同于Date类的parse方法(也不推荐使用)…并且此方法的javadoc声称:

请注意,这与SimpleDateFormat中使用的小于100的年份的解释略有不同。

如果这是唯一的变化,我想你可以继续这样做。