46

今、私はこのコードを使用しています

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE) - 1, 12, 0, 0); //Sets Calendar to "yeserday, 12am"
if(sdf.format(getDateFromLine(line)).equals(sdf.format(cal.getTime())))                         //getDateFromLine() returns a Date Object that is always at 12pm
{...CODE

getdateFromLine()によって返される日付が昨日の日付であるかどうかを確認するためのよりスムーズな方法が必要です。重要なのは日付だけで、時間は重要ではありません。そのため、SimpleDateFormatを使用しました。よろしくお願いします!

4

8 に答える 8

91
Calendar c1 = Calendar.getInstance(); // today
c1.add(Calendar.DAY_OF_YEAR, -1); // yesterday

Calendar c2 = Calendar.getInstance();
c2.setTime(getDateFromLine(line)); // your date

if (c1.get(Calendar.YEAR) == c2.get(Calendar.YEAR)
  && c1.get(Calendar.DAY_OF_YEAR) == c2.get(Calendar.DAY_OF_YEAR)) {

これは、1月1日のような日付でも機能します。

于 2010-06-09T13:50:01.540 に答える
24

java.time

java.timeJava8に組み込まれたフレームワークを使用する

LocalDate now = LocalDate.now(); //2015-11-24
LocalDate yesterday = LocalDate.now().minusDays(1); //2015-11-23

yesterday.equals(now); //false
yesterday.equals(yesterday); //true

Oracleの公式LocalDate チュートリアルは次のように述べています

比較にはequalsメソッドを使用する必要があります。

、、、などのオブジェクトを使用している場合LocalDateTimeZonedDateTime、にOffsetDateTime変換できますLocalDate

LocalDateTime.now().toLocalDate(); # 2015-11-24
于 2015-11-24T11:59:46.513 に答える
14

私は、正気を保ちたいのであれば、 Joda-Timeライブラリが行く方法であるというAshKimに同意します。

import org.joda.time.DateTime;

public static boolean dayIsYesterday(DateTime day) {
    DateTime yesterday = new DateTime().withTimeAtStartOfDay().minusDays(1);
    DateTime inputDay = day.withTimeAtStartOfDay();

    return inputDay.isEqual(yesterday);
}

この例では、DateTimedayが昨日からのものである場合、はdayIsYesterday(day)を返しtrueます。

于 2011-03-23T21:51:25.547 に答える
9
于 2014-06-13T20:48:38.210 に答える
3

カレンダーを設定する代わりに、次のことを試してください。

public static void main(String[] args) {
    int DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
    Date date = new Date();
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");
    String prevDate = dateFormat.format(date.getTime() - DAY_IN_MILLIS);
    String currDate = dateFormat.format(date.getTime());
    String nextDate = dateFormat.format(date.getTime() + DAY_IN_MILLIS);
    System.out.println("Previous date: " + prevDate);
    System.out.println("Current date: " + currDate);
    System.out.println("Next date: " + nextDate);
  }

これにより、カレンダーに沿って前後に移動できるようになります

次に、getDateFromLine(line)をprevDate値または任意の値と単純に比較できます。

于 2010-06-09T13:29:29.870 に答える
1

大まかにこのようなもの:

         Calendar c1 = Calendar.getInstance();
         Date d1 = new Date(/* control time */);
         c1.setTime(d1);

        //current date
        Calendar c2 = Calendar.getInstance();

        int day1=c1.get(Calendar.DAY_OF_YEAR);
        int day2=c2.get(Calendar.DAY_OF_YEAR);

       //day2==day1+1 
于 2010-06-09T13:45:43.133 に答える
1

この方法を使用してこのメ​​ソッドをテストすると、少し混乱することがわかりました。

 Calendar now = new GregorianCalendar(2000, 1, 1);
 now.add(Calendar.DATE, -1);

 SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd");
 System.out.println(format.format(now.getTime()));

私の期待は1999-12-31を印刷することですが、実際は2001-1-31です。Calendar.add ()は月の日のみを処理すると思います。

しかし、実際のエラーは、Calendarオブジェクトを作成する方法です。カレンダーでは、月は0から始まり、変数の現在の値は2001-2-1であり、私はそれを印刷しないほど自尊心がありました。何かが間違っているのを見つけたとき。カレンダーを作成する正しい方法は次のとおりです。

 Calendar now = new GregorianCalendar(2000, Calendar.JANUARY, 1);

カレンダーは元C#プログラマーにとってとても奇妙でした:(

于 2015-04-17T06:01:31.843 に答える
0

これらの拡張メソッドを自由に再利用してください。彼らはこの投稿の回答に非常に影響を受けました。ちなみにみんなありがとう!

fun Date.isSameDay(other: Date): Boolean {
    val thisCalendar = Calendar.getInstance()
    val otherCalendar = Calendar.getInstance()
    thisCalendar.time = this
    otherCalendar.time = other
    return thisCalendar.get(Calendar.YEAR) == otherCalendar.get(Calendar.YEAR)
            && thisCalendar.get(Calendar.DAY_OF_YEAR) == otherCalendar.get(Calendar.DAY_OF_YEAR)
}

fun Date.isYesterday(other: Date): Boolean {
    val yesterdayCalendar = Calendar.getInstance()
    yesterdayCalendar.time = other
    yesterdayCalendar.add(Calendar.DAY_OF_YEAR, -1)

    return yesterdayCalendar.time.isSameDay(this)
}
于 2020-07-27T15:00:08.237 に答える