2009-04-05 38 views
8

私のプログラムは、黒澤を生成(生産)して顧客に提供させることです。Javaでの日付計算、今日から3ヶ月追加

私たちは黒澤氏を生成するたびに、製造日から3ヶ月間のIDとその製造日と有効期限を印刷する必要があります。

私の問題は:3ヶ月後の日付はどのようにして計算できますか?

+0

ところで、黒澤とは何ですか? –

+1

Wikipediaによると、日本の長野県佐久市で醸造された酒です。 –

答えて

15

組み込みのJava Calendar APIを使用してください。

Calendar c = Calendar.getInstance(); 
c.add(Calendar.MONTH, 3); 

あなたが探している形式で日付を正確に印刷する方法については、APIを参照してください。

9

あなたもはるかに強力かつ簡単Joda Time Libraryを使用するために使用することができます

DateMidnight productionDate = new DateMidnight(); 
DateMidnight expirationDate = productionDate.plusMonths(3); 
System.out.println(expirationDate.toString("dd.MM.yyyy")); 

ジョダ時間は内蔵のJava Calendar API.

+0

Jodaを3ヶ月追加するだけの簡単な方法はなぜですか? – javashlook

+1

あなたは正しいですが、3ヶ月をjava.util.Date/Calendarに追加すると、エラーが発生しやすい同じインスタンスを操作します。 Joda-Timeオブジェクトは不変です。そして、私はあなたが通常3ヶ月を追加するよりも日付のものよりも何かをやると思います。 Java7にJoda-Time(JSR310)が含まれることを願っています –

0

あなたは日付算術で作業する必要がある場合ジョダの作品に比べて多くの利点を持っていますカレンダーはタイムスタンプが好きです。

0

/JavaクラスCalendarは抽象クラスです。したがって、GregorianCalendarクラスを使用する必要があります。/

java.util.GregorianCalendar gC = new java.util.GregorianCalendar(); 

java.util.Date yourDate = new java.util.Date(); 
gC.setTime(yourDate); 

//

1週間バック
gC.add(java.util.Calendar.WEEK_OF_YEAR, -1); 
+2

[getInstance](http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getInstance%28%29 )メソッドは静的なので、使用することができます。 – KSev

+1

getInstance()は静的なファクトリメソッド(有効なJava、Joshua Blochを参照)で、ロケールの最適な時刻を決定するためです。 –

1

TLを行くために3ヶ月/

gC.add(java.util.Calendar.MONTH_OF_YEAR, 3); 

/を追加します。DR

LocalDate.now()   // Determine today’s date. 
     .plusMonths(3) // Add three months. 

java.time

現代のアプローチでは、java.timeクラスを使用しています。

LocalDateクラスは、タイムゾーンのない時間帯のない日付のみの値を表します。

タイムゾーンは、日付を決定する際に重要です。任意の瞬間について、日付は地球の周りでゾーンごとに異なります。たとえば、Paris Franceの真夜中の数分後には、新しい日がありますが、まだ「昨日」はMontréal Québecです。

タイムゾーンが指定されていない場合、JVMは現在のデフォルトタイムゾーンを暗黙的に適用します。そのデフォルトはいつでも変更される可能性がありますので、結果は異なる場合があります。期待どおりのタイムゾーンを明示的に引数として指定する方がよいでしょう。

は、America/MontrealAfrica/Casablanca、又はPacific/Aucklandとして、continent/regionの形式でproper time zone nameを指定します。ESTまたはISTのような3〜4文字の略語は、ではなく、のように、標準化されておらず、ユニークではない(!)と使用しないでください。

ZoneId z = ZoneId.of("America/Montreal"); 
LocalDate today = LocalDate.now(z); 

3ヶ月間を追加すると、java.timeが数式を実行します。

LocalDate threeMonthsLater = today.plusMonths(3) ; 

java.timeについて

java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.DateCalendar、& SimpleDateFormatなどの面倒な古いlegacy日時クラスに取って代わります。

にあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。

詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。

ここで、java.timeクラスを取得するには?

  • Java SE 8Java SE 9、以降
    • 内蔵しています。
    • バンドルされた実装の標準Java APIの一部です。
    • Java 9には、いくつかのマイナーな機能と修正が加えられています。
  • Java SE 6Java SE 7
    • java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
  • Android
    • java.timeクラスのAndroidのバンドル実装以降のバージョン。
    • 以前のAndroidの場合、ThreeTenABPプロジェクトはThreeTen-Backport(上記)に適合しています。 How to use ThreeTenABP…を参照してください。

ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、IntervalYearWeekYearQuartermoreなどの便利なクラスがあります。

関連する問題