使用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
这可能是什么?
答案 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 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)
如果你使用它们,什么都不会破坏......
但在将来的版本中可能会删除它们。