web-dev-qa-db-ja.com

日付に1日を追加する方法

特定の日に1日を加えたい。どうやってやるの?

Date dt = new Date();

今、私はこの日に一日を加えたいと思います。

191
user93796

Date dtを考えると、いくつかの可能性があります。

解決策1:そのためにCalendarクラスを使用できます。

Date dt = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(dt); 
c.add(Calendar.DATE, 1);
dt = c.getTime();

解決策2:Joda-Timeライブラリの使用を真剣に検討する必要がありますDateクラスのさまざまな欠点のため。 Joda-Timeを使えば、次のことができます。

Date dt = new Date();
DateTime dtOrg = new DateTime(dt);
DateTime dtPlusOne = dtOrg.plusDays(1);

解決策3:Java 8を使うと、新しいJSRも使用できます。 310API(Joda-Timeから着想を得たもの):

Date dt = new Date();
LocalDateTime.from(dt.toInstant()).plusDays(1);
441
Daniel Rikowski
Date today = new Date();
Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));

DateにはUNIX-Epochからのミリ秒を使ったコンストラクタがあります。 getTime() - メソッドはあなたにその値を与えます。 1日のミリ秒数を足すと、うまくいきます。このような操作を定期的に行いたい場合は、値に定数を定義することをお勧めします。

重要なヒント:それはすべての場合で正しくありません。下記の警告コメントを読んでください。

62
Mnementh

トップの回答で述べたように、Java 8以降では以下のことが可能です。

Date dt = new Date();
LocalDateTime.from(dt.toInstant()).plusDays(1);

しかし、これは時々このようなDateTimeExceptionにつながることができます:

Java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: 2014-11-29T03:20:10.800Z of type Java.time.Instant

単にタイムゾーンを渡すことでこの例外を回避することが可能です。

LocalDateTime.from(dt.toInstant().atZone(ZoneId.of("UTC"))).plusDays(1);
13
behzad

tl; dr

LocalDate.of( 2017 , Month.JANUARY , 23 ) 
         .plusDays( 1 )

Java.time

Java.util.Date クラスを完全に避けるのが最善です。ただし、そうする必要がある場合は、面倒な古いレガシーの日時クラスと最新のJava.timeクラスの間で変換できます。古いクラスに追加された新しいメソッドに注目してください。

Instant

Instant クラスは、Dateとほぼ同等であり、どちらもタイムライン上の瞬間です。 Instantはナノ秒に解決されますが、Dateはミリ秒です。

Instant instant = myUtilDate.toInstant() ;

これに1日追加することもできますが、UTCではこれに留意してください。そのため、夏時間などの異常は考慮されません。 ChronoUnit クラスで時間単位を指定します。

Instant nextDay = instant.plus( 1 , ChronoUnit.DAYS ) ;

ZonedDateTime

タイムゾーンに精通したい場合は、ZoneIdを指定してZonedDateTimeを取得します。 適切なタイムゾーン名 を、 continent/regionAmerica/Montreal 、またはAfrica/CasablancaなどのPacific/Aucklandの形式で指定します。 ESTISTなどの3〜4文字の略語は、notであり、標準化されておらず、一意(!)でもないため、絶対に使用しないでください。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
ZonedDateTime zdtNextDay = zdt.plusDays( 1 ) ;

また、追加する期間(1日)をPeriodとして表すこともできます。

Period p = Period.ofDays( 1 ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ).plus( p ) ;

その翌日の最初の瞬間が欲しいかもしれません。日が00:00:00から始まると想定しないでください。夏時間(DST)などの異常は、その日が01:00:00などの別の時間に始まることを意味します。Java.timeに、そのゾーンのその日の1日の最初の瞬間を決定させます。

LocalDate today = LocalDate.now( z ) ;
LocalDate tomorrow = today.plus( p ) ;
ZonedDateTime zdt = tomorrow.atStartOfDay( z ) ;

Java.timeについて

Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.DateCalendar 、& SimpleDateFormat などの厄介な古い legacy date-timeクラスに取って代わります。

Joda-Time プロジェクトは、現在 メンテナンスモード であり、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracle Tutorial を参照してください。また、Stack Overflowで多くの例と説明を検索してください。指定は JSR 31 です。

Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠する JDBCドライバー を使用します。文字列もJava.sql.*クラスも必要ありません。

Java.timeクラスはどこで入手できますか?

  • Java SE 8Java SE 9Java SE 1 以降、
    • ビルトイン。
    • 実装がバンドルされた標準Java AP​​Iの一部。
    • Java 9は、いくつかのマイナーな機能と修正を追加します。
  • Java SE 6 および Java SE 7
    • Java.time機能の多くは、 ThreeTen-Backport のJava 6および7にバックポートされています。
  • Android
    • Androidの後のバージョンは、Java.timeクラスの実装をバンドルします。
    • 以前のAndroid(<26)の場合、 ThreeTenABP プロジェクトはThreeTen-Backport(上記)に適合します。 ThreeTenABPの使用方法… を参照してください。

ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。 IntervalYearWeekYearQuarter 、および more などの便利なクラスがあります。


更新: Joda-Timeライブラリがメンテナンスモードになりました。チームは、Java.timeクラスへの移行を推奨しています。このセクションは歴史のためにそのまま残しています。

ジョーダタイム

Joda-Time 2.3ライブラリを使用すると、このような日時の作業がはるかに簡単になります。 JavaにバンドルされているJava.util.Dateクラスは面倒なことで有名なので、避けるべきです。

以下にコード例を示します。

Java.util.DateはJoda-Time DateTime オブジェクトに変換されます。 j.u.Dateとは異なり、DateTimeは割り当てられたタイムゾーンを本当に認識しています。同じ 壁時計時間 明日を取得するために日を追加することは、 夏時間( DST) ここ米国で。 タイムゾーン を指定すると、Joda-Timeはそのような調整を行うことができます。日を追加した後、DateTimeオブジェクトをJava.util.Dateオブジェクトに変換します。

Java.util.Date yourDate = new Java.util.Date();

// Generally better to specify your time zone rather than rely on default.
org.joda.time.DateTimeZone timeZone = org.joda.time.DateTimeZone.forID( "America/Los_Angeles" );
DateTime now = new DateTime( yourDate, timeZone );
DateTime tomorrow = now.plusDays( 1 );
Java.util.Date tomorrowAsJUDate = tomorrow.toDate();

コンソールにダンプ…

System.out.println( "yourDate: " + yourDate );
System.out.println( "now: " + now );
System.out.println( "tomorrow: " + tomorrow );
System.out.println( "tomorrowAsJUDate: " + tomorrowAsJUDate );

実行すると…

yourDate: Thu Apr 10 22:57:21 PDT 2014
now: 2014-04-10T22:57:21.535-07:00
tomorrow: 2014-04-11T22:57:21.535-07:00
tomorrowAsJUDate: Fri Apr 11 22:57:21 PDT 2014
12
Basil Bourque

Dateオブジェクトに任意の時間を追加する簡単な方法を見つけました

Date d = new Date(new Date().getTime() + 86400000)

どこで:

86 400 000ms = 1 Day  : 24*60*60*1000
 3 600 000ms = 1 Hour :    60*60*1000
10
plailopo

これにより、日付が1つ増えます

String untildate="2011-10-08";//can take any date in current format    
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );   
Calendar cal = Calendar.getInstance();    
cal.setTime( dateFormat.parse(untildate));    
cal.add( Calendar.DATE, 1 );    
String convertedDate=dateFormat.format(cal.getTime());    
System.out.println("Date increase by one.."+convertedDate);
10
navneet

このメソッドは import org.Apache.commons.lang.time.DateUtils の後に使用できます。

DateUtils.addDays(new Date(), 1));
9
user3204989

Java 8 LocalDate API

LocalDate.now().plusDays(1L);

4
traeper

日付と時刻の計算には、 joda をお勧めします。

Date tomorrow = now().plusDays(1).toDate();

または

endOfDay(now().plus(days(1))).toDate()
startOfDay(now().plus(days(1))).toDate()
4
remipod

dateTimeオブジェクトobj.Addを使用して、一日の時間などに必要なものを追加します。これが機能することを願っています:)

4
Vinay Pandey

それを少しJava固有のものにしないようにするために、基本的な原則は、ある線形日付形式、ユリウス日、修正ユリウス日、エポックからの秒数などに変換し、日を追加して元に戻すことです。

これをする理由は、あなたが「うるう日、うるう秒などの権利を得る」という問題を、運が良ければ、この問題を解決していない人に頼りにしているからです。

これらの変換ルーチンを正しくするのは難しい場合があることに注意してください。人々が時間を混乱させる驚くべき数の異なる方法があります、最も注目されている例はMSのZuneでした。 MSであまりにも面白くしすぎないでください、それはめちゃくちゃ簡単です。 TAIとTTのように、複数の異なる時間形式があることは意味がありません。

3
Bruce ONeel

使用するのに最適なもの:

      long currenTime = System.currentTimeMillis();
      long oneHourLater = currentTime + TimeUnit.HOURS.toMillis(1l);

同様に、月、日、分などを追加することができます。

3
gaurav414u

非常に特別な場合あなたのコンピュータプログラミング教授から、あなた自身の日付クラスをするように頼んだならば。この方法はとても良い仕事をするでしょう。

public void addOneDay(){
    int [] months = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    day++;
    if (day> months[month-1]){
        month++;
        day = 1;
        if (month > 12){
            year++;
            month = 1;
        }
    }
}
3
Burak

Java 1.8バージョンには、データタイムAPI用のNiceアップデートがあります。

これがコードの断片です。

    LocalDate lastAprilDay = LocalDate.of(2014, Month.APRIL, 30);
    System.out.println("last april day: " + lastAprilDay);
    LocalDate firstMay = lastAprilDay.plusDays(1);
    System.out.println("should be first may day: " + firstMay);
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd");
    String formatDate = formatter.format(firstMay);
    System.out.println("formatted date: " + formatDate);

出力:

last april day: 2014-04-30
should be first may day: 2014-05-01
formatted date: 01

詳細については、このクラスへのJavaドキュメントを参照してください。

2
nazar_art

私たちがJava 8でそれを行うことができる方法を紹介します。どうぞ:

public class DemoDate {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        System.out.println("Current date: " + today);

        //add 1 day to the current date
        LocalDate date1Day = today.plus(1, ChronoUnit.DAYS);
        System.out.println("Date After 1 day : " + date1Day);
    }
}

出力:

Current date: 2016-08-15
Date After 1 day : 2016-08-16
2
PAA

このコードを試してみてください。

public Date getToDateAfterDays(Integer day) {
        Date nowdate = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(nowdate);
        cal.add(Calendar.DATE, day);
        return cal.getTime();
    }
2
Hakan Anlamaz

Java 8 Time API:

Instant now = Instant.now(); //current date
Instant after= now.plus(Duration.ofDays(300));
Date dateAfter = Date.from(after);
2
GKislin

UはこのようにJava.util.Dateライブラリを試すことができます -

int no_of_day_to_add = 1;

Date today = new Date();
Date tomorrow = new Date( today.getYear(), today.getMonth(), today.getDate() + no_of_day_to_add );

必要に応じてno_of_day_to_addの値を変更してください。

私はno_of_day_to_addの値を1に設定しました。なぜなら、uは1日だけ追加したいからです。

このドキュメント にもっと多くの情報があります。

1
Abrar Jahin