我正在尝试创建一个Date
这样的:
date = new Date(year-1900, mon-1, day, hrs, min, sec);
并且 Eclipse 给了我这个警告:“构造函数Date(int, int, int, int, int)
已被弃用”。
不推荐使用构造函数意味着什么,我该怎么办?
我正在尝试创建一个Date
这样的:
date = new Date(year-1900, mon-1, day, hrs, min, sec);
并且 Eclipse 给了我这个警告:“构造函数Date(int, int, int, int, int)
已被弃用”。
不推荐使用构造函数意味着什么,我该怎么办?
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 文档所建议的那样。
这意味着您通常不应该在新代码中使用它,因为它很危险,或者因为存在更好的替代方案。当在非弃用代码中使用或覆盖弃用的程序元素时,编译器会发出警告。
在您的情况下,您可以使用java.util.Calendar
class 而不是java.util.Date
.
顺便说一句,在 Java 8 及更高版本中,这些旧类被新的java.time 包(Tutorial)取代。受Joda-Time启发,由JSR 310定义,并由ThreeTen Extra项目扩展。旧类仍然存在,您可以继续使用它们(同时避免它们已弃用的部分),但我们鼓励您过渡到新类。
不推荐使用意味着它是做某事的遗留或旧方式,应该避免。
根据此文档http://java.sun.com/j2se/1.4.2/docs/api/java/util/Date.html,使用Calendar.set(...)
.
这是一个代码片段,可帮助您迁移代码。两种印刷品是一样的。
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
因为它已被弃用意味着你不应该真正使用它。您可以改为使用日历从字段生成日期。
deprecated 表示不鼓励使用此构造函数,并且可能会在 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 中,他们引入了将不推荐使用的项目标记为删除的可能性。我仍然很想知道他们是否会在某个时候将此构造函数标记为删除。
不推荐使用通常意味着不鼓励您使用该功能。
出于某种原因,已经决定没有它 Java 会更好(因为存在更好的替代方案,而您应该使用它),因此它可能会从 Java 的未来版本中删除。弃用基本上是一个警告,“这可能会在未来被删除,尽管我们将它保留一段时间,让你有机会首先从你的代码中删除它”
已弃用意味着核心 API 和其他 java 库不依赖于它,它表示您有更好的方法。