Java中不推荐使用的Date方法?

时间:2010-07-29 16:47:00

标签: java deprecated simpledateformat parseexception

使用Java Date实用程序时的真正含义是什么并且已弃用。这是否意味着不鼓励使用,还是暗示它被禁止?

我猜测使用弃用方法是不好的做法,但我不确定并希望了解。

例如,我正在尝试使用以下代码

String date = request.getParameter("date"); 
model.setDate(new Date(date));

当然......这是一个高级示例,但在这种情况下,我的模型使用类型日期,我需要将请求中的日期作为字符串提取并创建日期它

我的工作方式很好,但它使用的是弃用的方法。

编辑 - 我已经回去并使用了

SimpleDateFormat formatter = new SimpleDateFormat(); 
model.setDate(formatter.parse(request.getParameter("date");



日期的格式为MM / DD / YYY,如07/23/2010,但我得到 ParseException

这可能是什么?

10 个答案:

答案 0 :(得分:6)

你说这是不好的做法。几乎在所有情况下,弃用的方法都会告诉您使用什么,这也不例外(参见the Javadocs)。

您正在尝试从Date中创建String。但是String的格式是什么?应该如何解析?是英国还是美国的日期格式?

执行此操作的“正确”方法是创建SimpleDateFormat的实例,并调用其parse()方法传入文本字符串。这保证将来会有效,现在会更加强大。

答案 1 :(得分:3)

不推荐使用的对象或方法仅仅意味着如果您想在当前项目中使用它,请使用推荐。他们仍然拥有它的原因是遗留代码使用了弃用方法之前它已被弃用。典型的例子是StringTokenizer vs String.split()方法。

对于您的日期示例,使用SimpleDateFormat进行从String到Date的转换。这允许您创建一个日期格式,从中可以解析字符串日期以创建Date对象。


对于编辑执行此操作

SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); 

model.setDate(formatter.parse(request.getParameter("date")));

由于您没有提供日期格式结构,导致ParseException,因此SimpleDateFormat不知道您的日期是如何构建的。

答案 2 :(得分:3)

很多人都提到了Deprecated意味着什么,但我没有看到为什么这些方法被弃用的任何解释:

Sun(在他们加入Oracle之前)弃用Date中的一些方法,让人们使用Calendar / GregorianCalendar类进行日期操作。

答案 3 :(得分:2)

  

“弃用”意味着什么

     

您可能听说过这个词,   “自嘲幽默”或幽默   最小化说话者的   重要性。已弃用的课程或   方法就是这样。它不再是   重要。它太不重要了   事实上,你应该不再使用   它,因为它已被取代和   可能在将来不再存在。

     

Java提供了一种表达方式   弃用,因为,作为一个类   进化,其API(应用程序   编程接口)不可避免   更改:方法重命名为   一致性,新的和更好的方法   添加,字段更改。但是这样   变化引入了一个问题。你需要   保持旧的API,直到   开发人员转型为   新的,但你不希望他们   继续编程到旧的API。

     

弃用课程的能力,   方法或成员字段解决了   问题。 Java支持两种机制   对于弃用:和注释,   (从J2SE 5.0开始支持)和   一个Javadoc标记(从1.1开始支持)。   继续对旧API的现有调用   工作,但注释导致   编译器发出警告时   查找对已弃用程序的引用   元素。 Javadoc标签和   相关评论警告用户反对   使用已弃用的项目并告诉   他们改为使用什么。而是使用什么。

http://download-llnw.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html

答案 4 :(得分:2)

你是对的,不鼓励使用弃用的方法。 这是因为这些方法在某些情况下可能存在问题,或者已被更乐观的解决方案所取代。未来的版本可能也不支持这些方法。

答案 5 :(得分:1)

不推荐使用意味着计划将其删除,因为它有漏洞或其他一些不良原因。 最好使用SimpleDateFormat.parse();来解析字符串。

答案 6 :(得分:1)

一般情况下,当Sun(Oracle,无论如何)声明Java方法被弃用时,这意味着他们改变了对包含它的想法,他们不鼓励你使用它,并且他们可能会在将来的某个版本中删除它。当然,它可能需要很长时间才能被删除,因为谁知道有多少现有代码在那里使用它,以及破坏现有程序的重点是因为Java的发明者认为他们现在对如何更好地了解做某事?

据推测,他们有理由弃用某些东西,所以你应该调查为什么他们说某些新功能更好。

对于不推荐使用的Date方法,通常这意味着他们建议您现在使用Calendar或SimpleDateFormat类。在你的情况下,可能是后者。

答案 7 :(得分:0)

已弃用 :当前版本的Java中存在的内容,但在某些时候将从以后的版本中删除。

对于您的编辑,您需要正确初始化SimpleDateFormat,因此它知道将采用何种格式。对于07/22/1978格式:

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");

答案 8 :(得分:0)

正如其他人所说,java.util.Date方法已被弃用,因为Java团队认为他们在java.util.Calendar中有更好的解决方案。

不幸的是,这个课程也被证明是令人困惑,麻烦和设计不佳。

所以,是的,您应该避免使用已弃用的方法来尊重它们的替代品。但现在这些替换(.Calendar)有一个替换(java.time)。

java.time

所有旧的日期时间类已被Java 8中内置的java.time框架取代。新类的灵感来自非常成功的Joda-Time框架,旨在作为其继承者,在概念上类似但重新设计。由JSR 310定义。由ThreeTen-Extra项目扩展。请参阅Tutorial

使用java.time.format包解析并生成日期时间值的字符串表示。

String input = "07/23/2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "MM/dd/yyyy" );

新类包括LocalDate,用于表示没有时间的仅限日期的值。

LocalDate localDate = LocalDate.parse( input , formatter );

如果您在LocalDate上调用toString,您将获得标准ISO 8601格式YYYY-MM-DD的日期值的字符串表示形式。要生成其他格式的String,请定义另一个格式化程序。或者调用'localize'方法让java.time在确定特定的本地化格式时做繁重的工作。

答案 9 :(得分:-1)

如果你使用它们,什么都不会破坏......

但在将来的版本中可能会删除它们。