115
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ます。なんで?

4

6 に答える 6

129

Calendar では、月は 0 から始まります。したがって、12 は 12 月 + 1 か月と解釈されます。使用する

c.set(year, month - 1, day, 0, 0);  
于 2013-05-11T16:19:09.470 に答える
75

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

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

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

calendar.set(year, month - 1, day, 0, 0);
于 2016-03-01T00:31:52.407 に答える
33

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
于 2015-11-24T11:19:26.803 に答える
11

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

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

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

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

于 2013-05-11T16:35:01.753 に答える
6

JavaDocを参照してください。

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

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

于 2013-05-11T16:18:50.547 に答える