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

月份在日历中从零开始。所以 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 的日历表示不是最好的,他们正在为 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 开始。例如,0 表示一月。

因此,您设置的月份是明年的第一个月。

于 2013-05-11T16:18:50.547 回答
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

您还可以指定用于解析和打印的模式。

于 2013-05-11T17:23:39.913 回答