Creating java date object from year,month,day

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());

Output is:

1988
Wed Jan 25 00:00:08 IST 1989

I am passing 25 12 1988 but I get 25 Jan 1989. Why?

187438 次浏览

JavaDoc:

MONTH-用于设置 MONTH 日历字段的值 基于0的。例如,1月为0。

所以,你设定的月份是明年的第一个月。

月份在日历中是从零开始的。所以12被解释为12月 + 1个月。使用

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

Java 的日历表示并不是最好的,他们正在为 Java8开发它。我建议您使用 乔达时间或其他类似的库。

下面是从 Joda Time 库中使用 LocalDate 的一个快速示例:

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

在这里 你可以遵循一个快速入门教程。

在处理日期、时间戳和持续时间时,使您的生活变得简单

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

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

爪哇时间

使用内置在 Java8中的 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

如果您还需要有关时间(小时、分钟、秒)的信息,请使用从 LocalDateLocalDateTime的一些转换

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

这是 Java8之前我最喜欢的方式:

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

我得说这比:

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