我正在尝试创建一个这样的日期:
date = new Date(year-1900,mon-1,day,hrs,min,sec);
和Eclips给了我这个警告:“不推荐使用构造函数Date(int,int,int,int,int)”。
建议者被弃用意味着什么?我该怎么办?
答案 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)
。答案 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 package(Tutorial)取代。灵感来自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)
...我该怎么办?
例如:
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库不依赖于它,它表示你有更好的方法。