2013-02-18 675 views
8

我尝试获取昨天的日期。所以我写了下面的函数:获取昨天 - 类型Date中的方法getDate()已弃用

public String getYestrday() { 
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    Date date = new Date(); 
    return dateFormat.format(date.getDate() - 1); 
} 

但它给我的下一个警告:

The method getDate() from the type Date is deprecated 

,并没有做到这一点的工作。

谢谢你的帮助。

+1

以下的工作,如果你避免了一个小任务额外的库完全 – 2013-02-18 14:12:10

回答

16

Date#getDate()是JDK 1.1之后的弃用方法。您应该使用Calendar类来处理日期。

API

此前JDK 1.1,类Date有两个附加功能。它允许日期的解释为年,月,日,小时,分钟, 和第二个值。它还允许格式化和解析日期 字符串。不幸的是,这些功能的API不适用于国际化的 。从JDK 1.1起,日历类应该是 ,用于在日期和时间字段之间进行转换,并且应使用DateFormat类 来格式化和分析日期字符串。 Date中相应的 方法已弃用。

它也清楚地使用Date#getDate()的API文档中使用Calendar#get(Calendar.DATE);

已过时。从JDK 1.1版,用 Calendar.get(Calendar.DAY_OF_MONTH)取代

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, -1); 
return dateFormat.format(cal.getTime()); 
+3

+1阅读弃用文本提示来'Calendar'。无论是'Calendar.DAY_OF_MONTH'还是'Calendar.DATE'都可以,它们是同义词。 – Gamb 2013-02-18 14:21:15

1

使用java.util.Calendar来做到这一点。或者试试JODA

0

可以使用Calendar类来完成相同的任务:

Calendar c = new Calendar(); 
//c.add(Calendar.DAY_OF_MONTH, -1); 
Date d = c.getTime(); 
+0

java.util.Calendar的空构造函数受保护。使用Calendar.getInstance()。getTime();代替 – BlondCode 2017-01-17 13:33:30

1

避免java.util.Date &。日历

accepted answer是正确的。但是,java.util.Date和.Calendar类出了名的麻烦。避免它们。使用Joda-Time或新的java.time package(在Java 8中)。

独立日期时间操纵从格式化

同样,在问题的代码融合了格式化日期时间的工作。将这些任务分开以使代码更清晰,并且更容易进行测试/调试。

时区

时区对日期时间工作至关重要。如果您忽略该问题,则将应用JVM的默认时区。更好的做法是始终指定而不是依靠默认值。即使你想要默认值,明确地调用getDefault

一天的开始由时区定义。早些时候在巴黎的一个新的一天比蒙特利尔早。因此,如果“昨天”是指当天的第一时刻,那么您应该(a)指定时区,并(b)致电withTimeAtStartOfDay

Joda-Time

Joda-Time中的示例代码2.3。

DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris"); 
DateTime today = DateTime.now(timeZone); 

或者从java.util.Date对象转换而来。

DateTime today = new DateTime(myJUDate, timeZone); 

减去一天到昨天(或前一天)。在ISO 8601格式

DateTime yesterday = today.minusDays(1); 
DateTime yesterdayStartOfDay = today.minusDays(1).withTimeAtStartOfDay(); 

默认情况下,乔达,时间和java.time解析/生成的字符串。

String output = yesterdayStartOfDay.toString(); // Uses ISO 8601 format by default. 

使用格式化为一个完整的日期为四位数年份,年份的两位数月份和月(YYYY-MM-DD)的两位数的一天。 Joda-Time已经定义了这种格式化器。

String outputDatePortion = ISODateFormat.date().print(yesterdayStartOfDay); 
0

int date = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);