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()は、JDK1.1以降の非推奨のメソッドです。日付を操作するには、代わりにCalendarクラスを使用する必要があり

APIから:

JDK 1.1より前は、クラスDateに2つの追加機能がありました。これにより、日付を年、月、日、時、分、および秒の値として解釈できるようになりました。また、日付文字列のフォーマットと解析も可能になりました。残念ながら、これらの関数のAPIは国際化に適していませんでした。JDK 1.1以降では、Calendarクラスを使用して日付フィールドと時刻フィールドを変換し、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());
于 2013-02-18T14:12:02.807 に答える
1

それを行うために使用java.util.Calendarします。または、JODAをお試しください。

于 2013-02-18T14:10:47.587 に答える
1

java.util.Dateと.Calendarは避けてください

受け入れられた答えは正しいです。ただし、java.util.Dateクラスと.Calendarクラスは厄介なことで有名です。それらを避けてください。Joda -Timeまたは新しいjava.timeパッケージ(Java 8の場合)のいずれかを使用します。

日時操作とフォーマットを分離する

また、質問のコードは、日時の作業とフォーマットを組み合わせています。これらのタスクを分離して、コードを明確にし、テスト/デバッグを容易にします。

タイムゾーン

タイムゾーンは、日時作業で重要です。この問題を無視すると、JVMのデフォルトのタイムゾーンが適用されます。デフォルトに依存するのではなく、常に指定することをお勧めします。デフォルトが必要な場合でも、明示的にを呼び出しますgetDefault

1日の始まりは、タイムゾーンによって定義されます。モントリオールよりもパリの方が早く新しい日が始まります。したがって、「昨日」がその日の最初の瞬間を意味する場合は、(a)タイムゾーンを指定し、(b)を呼び出す必要がありますwithTimeAtStartOfDay

ジョーダタイム

Joda-Time2.3のサンプルコード。

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

または、java.util.Dateオブジェクトから変換します。

DateTime today = new DateTime( myJUDate, timeZone );

昨日(または前日)に到達するために1日を減算します。

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

デフォルトでは、Joda-Timeおよびjava.timeは、ISO8601形式の文字列を解析/生成します

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

完全な日付には、4桁の年、2桁の月、および2桁の日(yyyy-MM-dd)としてフォーマッターを使用します。このようなフォーマッタは、Joda-Timeですでに定義されています。

String outputDatePortion = ISODateFormat.date().print( yesterdayStartOfDay );
于 2014-06-13T20:18:59.637 に答える
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 に答える