不推荐使用构造函数Date(...)。这是什么意思? (JAVA)

时间:2010-01-04 14:16:54

标签: java date constructor deprecated

我正在尝试创建一个这样的日期:

date = new Date(year-1900,mon-1,day,hrs,min,sec);

和Eclips给了我这个警告:“不推荐使用构造函数Date(int,int,int,int,int)”。

建议者被弃用意味着什么?我该怎么办?

10 个答案:

答案 0 :(得分:40)

不推荐字面意思是拒绝,但更准确的翻译将退休不推荐使用意味着此方法仍然可用,但您不应使用它。它将逐渐被逐步淘汰。有一种新方法可以做同样的事情。不推荐使用的方法标有一个特殊的Javadoc注释:

/**
 *@deprecated Please now use newMethod()
 *@see newMethod()
 */

使用

  • Calendar.set(year + 1900, month, date, hrs, min)

  • GregorianCalendar(year + 1900, month, date, hrs, min)

根据建议by the API documentation

答案 1 :(得分:16)

这意味着您不应该在新代码中使用它。如果现在有更好的方法来实现某些目标,通常就是这种情况,但保持旧的方式以实现向后兼容。

相反,您可以使用Calendar API,因为有希望向您建议完整的消息 - 或者(更好的IMO)您可以使用Joda Time或{{1 Java 8中的包(参见tutorial)。这两个都是卓越的日期/时间API。到了

当涉及到弃用的API时,如果编译器消息提出替代方案,那么总是值得查看Javadoc - 在这种情况下建议使用java.time

答案 2 :(得分:5)

这意味着您不应该在新代码中使用它,因为它很危险,或者因为存在更好的替代方案。当在不推荐使用的代码中使用或覆盖已弃用的程序元素时,编译器会发出警告。

在您的情况下,您可以使用java.util.Calendar课程代替java.util.Date

顺便说一句,在Java 8及更高版本中,这些旧类被新的java.time packageTutorial)取代。灵感来自Joda-Time,由JSR 310定义,并由ThreeTen Extra项目进行扩展。旧类仍然存在,您可以继续使用它们(同时避免使用已弃用的部分),但我们鼓励您转换到新类。

答案 3 :(得分:4)

弃用意味着它是一种遗留或旧的方式来做某事,应该避免。

根据此文档http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html,请使用Calendar.set(...)

答案 4 :(得分:3)

以下是帮助迁移代码的代码段。两张照片都是一样的。

import java.util.Calendar;
import java.util.Date;

public class Tinker {

    public static void main(String[] args) {

        int Y = 2015; // Year 2015
        int M = 11;   // 0..11 -- December
        int D = 15;   // 15th
        int H = 16;   // 4:00 PM
        int MN = 28;  // 4:28 PM
        int S = 41;   // 4:28:41

        Date d = new Date(Y-1900,M,D,H,MN,S);

        System.out.println(d);

        Calendar c = Calendar.getInstance();
        c.set(Y, M, D, H, MN, S);

        d = c.getTime();
        System.out.println(d);                      

    }

}

输出:

Tue Dec 15 16:28:41 CST 2015
Tue Dec 15 16:28:41 CST 2015

答案 5 :(得分:2)

因为它被弃用意味着你不应该真正使用它。您可以使用日历从字段生成日期。

答案 6 :(得分:1)

不推荐意味着不鼓励使用此构造函数,并且可能会在将来的Java版本中删除它。使用Calendar API。

答案 7 :(得分:1)

java.time

  

...我该怎么办?

  1. 确定时区。
  2. 使用现代Java日期和时间API java.time。

例如:

    ZoneId zone = ZoneId.of("America/Glace_Bay");
    ZonedDateTime dateTime = ZonedDateTime.of(2019, 10, 27, 12, 34, 56, 0, zone);
    System.out.println(dateTime);

输出为:

  

2019-10-27T12:34:56-03:00 [美国/ Glace_Bay]

请勿使用Date。那堂课总是设计不好。有一个原因导致大多数构造函数和大多数方法都很快被弃用。它们无法跨时区可靠地工作。今天,我们在java.time中有了很多进步。

仅当您需要Date来购买无法立即升级到java.time的旧版API时,请像这样进行转换:

    Instant pointInTime = dateTime.toInstant();
    Date oldFashionedDate = Date.from(pointInTime);
    System.out.println(oldFashionedDate);

我所在时区的输出为:

  

2019年10月27日星期天格林尼治标准时间15:34:56

一天中的时间与我们指定的时间不一致。这是因为我在不同的时区。 Date.toString(从System.out.println调用)将日期显示在JVM的默认时区中,多年来,这一直困扰着许多人(这只是避免使用此类的众多原因之一)。 Date确实代表了正确的时间点,您可以将其用于旧版API。

  

不赞成使用构造函数是什么意思,……

许多人已经很好地解释了这一点。我并没有将1990年代的弃用当做删除构造函数的承诺。在Java 9中,他们引入了将不赞成使用的项目标记为删除的可能性。我仍然很好奇他们是否会在某个时候将其标记为要删除。

链接

答案 8 :(得分:0)

不推荐通常意味着您不鼓励使用该功能。

出于某种原因,已经决定如果没有它,Java会更好(因为存在更好的替代方案,你应该使用它),所以可能从Java的未来版本。弃用基本上是一个警告,“这可能会在将来被删除,尽管我们会保留它一段时间,让你有机会先从代码中删除它”

答案 9 :(得分:0)

  

不推荐意味着核心API和其他java库不依赖于它,它表示你有更好的方法。