48

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

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

并且 Eclipse 给了我这个警告:“构造函数Date(int, int, int, int, int)已被弃用”。

不推荐使用构造函数意味着什么,我该怎么办?

4

10 回答 10

46

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

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

使用

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

或者

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

正如API 文档所建议的那样。

于 2010-01-04T14:21:43.160 回答
17

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

相反,您可以使用CalendarAPI,因为希望向您建议完整的消息 - 或者(更好的 IMO)您可以使用Joda Timejava.timeJava 8 中的包(请参阅教程)。这两个都是非常优秀的日期/时间 API。到

当涉及到不推荐使用的 API 时,如果编译器消息没有建议替代方案,那么总是值得查看 Javadoc——在这种情况下建议使用Calendar.set(...).

于 2010-01-04T14:19:27.690 回答
5

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

在您的情况下,您可以使用java.util.Calendarclass 而不是java.util.Date.

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

于 2010-01-04T14:20:31.427 回答
4

不推荐使用意味着它是做某事的遗留或旧方式,应该避免。

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

于 2010-01-04T14:17:51.873 回答
4

这是一个代码片段,可帮助您迁移代码。两种印刷品是一样的。

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
于 2015-07-23T20:08:53.397 回答
2

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

于 2010-01-04T14:19:08.183 回答
1

deprecated 表示不鼓励使用此构造函数,并且可能会在 Java 的未来版本中删除。使用日历 API。

于 2010-01-04T14:21:32.007 回答
1

java.time

……我能做什么?

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

例如:

    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旧 API 而您现在无法升级到 java.time 时,才可以像这样转换:

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

我的时区的输出是:

2019 年 10 月 27 日星期日 15:34:56 GMT

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

构造函数被弃用是什么意思,...</p>

许多人已经很好地解释了这一点。我没有将 1990 年代的弃用作为移除构造函数的承诺。在 Java 9 中,他们引入了将不推荐使用的项目标记为删除的可能性。我仍然很想知道他们是否会在某个时候将此构造函数标记为删除。

链接

于 2019-10-27T08:41:24.533 回答
0

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

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

于 2010-01-04T14:20:58.663 回答
0

已弃用意味着核心 API 和其他 java 库不依赖于它,它表示您有更好的方法。

于 2015-07-30T04:39:56.930 回答