年、月、日からJava日付オブジェクトを作成する


95
int day = Integer.parseInt(request.getParameter("day"));  // 25
int month = Integer.parseInt(request.getParameter("month")); // 12
int year = Integer.parseInt(request.getParameter("year")); // 1988

System.out.println(year);

Calendar c = Calendar.getInstance();
c.set(year, month, day, 0, 0);  

b.setDob(c.getTime());

System.out.println(b.getDob());  

出力は次のとおりです。

1988
水1月25日00:00:08 IST 1989

合格です25 12 198825 Jan 1989。どうして?


1
コードのbは何ですか?
MysteryGuy

回答:


109

カレンダーでは、月はゼロから始まります。したがって、12は12月+ 1か月と解釈されます。使用する

c.set(year, month - 1, day, 0, 0);  

5
IBM APIデザイナー、JavaScript APIデザイナー。それ以外は、おそらく誰もいないでしょう。Calendarは、Java 8のjava.time APIによって廃止されました。これは、正しいことを行います。
JBニゼット2017

64

これがJava 8より前の私のお気に入りの方法です。

Date date = new GregorianCalendar(year, month - 1, day).getTime();

私はこれがよりクリーンなアプローチだと思います:

calendar.set(year, month - 1, day, 0, 0);

4
月はCalendar定数などを使用して指定できます。Calendar.FEBRUARY
Geekarist

1
Java 7では、以前はゼロから数えた月に注意してください。トラブルを避けるために定数を使用してください。
jediz

25

java.time

java.timeJava 8に組み込まれたフレームワークの使用

int year = 2015;
int month = 12;
int day = 22;
LocalDate.of(year, month, day); //2015-12-22
LocalDate.parse("2015-12-22"); //2015-12-22
//with custom formatter 
DateTimeFormatter.ofPattern formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDate.parse("22-12-2015", formatter); //2015-12-22

あなたはまた、時間に関する情報が必要な場合(時間、分を、秒)から、いくつかの変換を使用LocalDateしますLocalDateTime

LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00

正解ですが、わかっている場合はタイムゾーンを指定してください。AにLocalDateはタイムゾーンがないため、タイムライン上の正確な瞬間を表していません。あなたのコンテキストが時間帯を示している場合は、取得するためにそれを適用しますZonedDateTime:オブジェクト LocalDate.parse("2015-12-22").atStartOfDay( ZoneId.of( "America/Montreal" ) )
バジルボーク

8

Javaのカレンダー表現は最適ではありません。Java8向けに取り組んでいます。JodaTimeまたは他の同様のライブラリを使用することをお勧めします。

以下は、Joda TimeライブラリのLocalDateを使用した簡単な例です。

LocalDate localDate = new LocalDate(year, month, day);
Date date = localDate.toDate();

ここでは、クイックスタートチュートリアルを実行できます。


6

JavaDocを参照してください。

月-MONTHカレンダーフィールドの設定に使用される値。月の値は0ベースです。たとえば、1月の場合は0。

したがって、設定した月は翌年の最初の月です。


0

日付、タイムスタンプ、期間を操作するときに、あなたの人生を簡単にします。からHalDateTimeを使用

http://sourceforge.net/projects/haldatetime/?source=directory

たとえば、これを使用して、次のように入力を解析できます。

HalDateTime mydate = HalDateTime.valueOf( "25.12.1988" );
System.out.println( mydate );   // will print in ISO format: 1988-12-25

解析と印刷のパターンを指定することもできます。


3
自分のライブラリクラスを宣伝しているようですか?それはおそらく許可されますが、あなたがの主要な開発者であるかどうかを述べれば、それはより良く見えるでしょうHalDateTime
Ole VV

私は反対票を投じなかった。しかし、人生は日付で簡単ではありません。あなたのライブラリはその事実を変えることはありません。
kiltek

なぜ反対票を投じるのですか?私のライブラリは2013年のものです。すべての機能は、JSR 310で指定されているjava.timeで使用できます。私が個人的に見た場合、これは最高の設計のAPIの1つです。私はそれを使用することをお勧めします。
Hajo Lemcke
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.