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的年份的解释略有不同。
如果这是唯一的变化,我想你可以继续这样做。