web-dev-qa-db-ja.com

Javaでカレンダーを使用せず、日付だけのタイムスタンプなしで昨日の日付を取得するにはどうすればよいですか?

_yyyy-MM-dd_の形式で現在の日付を取得するメソッドを作成し、昨日の日付(現在の日付の前日)を取得する別のメソッドも作成できるようにしたいと考えています。これに必要なのは、タイムスタンプではなく日付です。 Calendarも使用しようとはしていません。この方法で現在の日付を設定しました:

_public class DateWithNoTimestamp
{
       private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";

       public final static String getCurrentDate()
       {
               DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
               Date date = new Date();
               return dateFormat.format(date);
       } 
}
_

これは現在の日付を取得するために機能しますが、現在は別のメソッドgetYesertdayDate()で問題が発生しています。 getCurrentDate()で1日を差し引いたときと同様の方法で設定するにはどうすればよいですか?

17
wheelerlc64

日付から1000 * 60 * 60 * 24ミリ秒を差し引くだけで、その値をフォーマットできます。

Date yesterday = new Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L));

これは手っ取り早い方法であり、コメントに記載されているように、夏時間の移行が発生すると壊れる可能性があります(年に2日)。推奨される代替手段は、 カレンダーAPIJoda API 、または新しいJDK 8 time APIです。

LocalDate today = LocalDate.now();
LocalDate yesterday = today.minusDays(1);
23
Giovanni Botta

org.Apache.commons.lang3.time.DateUtilsはより直感的で使いやすいです。

ご質問について

Date date = DateUtils.addDays(new Date(), -1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);

トリックを行います。また、JDK7以下でもうまく機能します。

13
dyng

Java 8以降では、 Java.time.LocalDate クラス:

LocalDate yesterday = LocalDate.now().minusDays(1L);
12
llappall

「昨日」のDate()オブジェクトを作成できます。

private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";

public final static String format(Date date) {
    DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
    return dateFormat.format(date);
}

public final static String formatToday() {
    return format(new Date());
}

public final static String formatYesterday() {
    return format(new Date(new Date().getTime() - 24*3600*1000));
}
3
Roberto

これを試して、昨日の日付を取得してください。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    long yourDateMillis = System.currentTimeMillis()- (24 * 60 * 60 * 1000);
                 Time yourDate = new Time();
         yourDate.set(yourDateMillis);

    String formattedDate = yourDate.format("%d-%m-%Y");
    txtViewYesterday.setText(formattedDate);}
0
Mamun

これを試して:

public class DateWithNoTimestamp
{
       private static final String CURRENT_DATE_FORMAT = "yyyy-MM-dd";

       public final static String getCurrentDate()
       {
           DateFormat dateFormat = new SimpleDateFormat(CURRENT_DATE_FORMAT);
           Date date = new Date();
           date .setTime(date.getTime()-24*60*60*1000);  // Subtract 24*60*60*1000 milliseconds
           return dateFormat.format(date);
       } 
}
0
Codev