web-dev-qa-db-ja.com

年、月、日からJava日付オブジェクトを作成しています

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 1988を渡しますが、25 Jan 1989を取得します。どうして?

78
JAVAGeek

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

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

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

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

これは次の方法よりもクリーンなアプローチだと思います。

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

Java.time

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

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

Time(hour、minute、second)に関する情報も必要な場合は、LocalDateからLocalDateTimeへの変換を使用してください。

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

JavaDoc を参照してください:

month-MONTHカレンダーフィールドの設定に使用される値。月の値は0から始まります。例:1月の場合は0。

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

6
zw324

JavaのCalendar表現は最適ではありません。Java 8のために取り組んでいます。 Joda Time または他の同様のライブラリを使用することをお勧めします。

Joda TimeライブラリのLocalDateを使用した簡単な例を次に示します。

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

ここ クイックスタートチュートリアルに従うことができます。

6
Fdiazreal