8

我试图得到昨天的日期。所以我写下一个函数:

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

它不起作用。

谢谢您的帮助。

4

5 回答 5

17

Date#getDate()是 JDK 1.1 之后不推荐使用的方法。您应该使用Calendar类来操作日期。

API

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

它也清楚地记录在 API 中使用Date#getDate()使用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());
于 2013-02-18T14:12:02.807 回答
1

避免使用 java.util.Date & .Calendar

接受的答案是正确的。然而,java.util.Date 和 .Calendar 类是出了名的麻烦。避开他们。使用Joda-Time或新的java.time 包(在 Java 8 中)。

将日期时间操作与格式化分开

此外,问题中的代码将日期时间工作与格式混合在一起。将这些任务分开,使您的代码更清晰,测试/调试更容易。

时区

时区在日期时间工作中至关重要。如果您忽略此问题,将应用 JVM 的默认时区。更好的做法是始终指定而不是依赖默认值。即使您想要默认值,也要显式调用getDefault.

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

乔达时间

Joda-Time 2.3 中的示例代码。

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

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

DateTime today = new DateTime( myJUDate, timeZone );

减去一天以得到昨天(或前一天)。

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

默认情况下,Joda-Time 和 java.time 解析/生成ISO 8601格式的字符串。

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

使用格式化程序将完整日期设置为四位数年份、两位数月份和两位数月份日期 (yyyy-MM-dd)。Joda-Time 中已经定义了这样的格式化程序。

String outputDatePortion = ISODateFormat.date().print( yesterdayStartOfDay );
于 2014-06-13T20:18:59.637 回答
1

用来java.util.Calendar做。或者试试乔达

于 2013-02-18T14:10:47.587 回答
0

您可以使用Calendar类来执行相同的任务:

Calendar c = new Calendar();
//c.add(Calendar.DAY_OF_MONTH, -1);
Date d = c.getTime();
于 2013-02-18T14:20:38.167 回答
0

以下对我有用

int date = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
于 2014-09-16T14:06:52.493 回答