从年,月,日创建Java日期对象

时间:2013-05-11 16:17:03

标签: java date time calendar

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。为什么呢?

6 个答案:

答案 0 :(得分:88)

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

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

答案 1 :(得分:49)

这是我在Java 8之前最喜欢的方式:

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

我说这是一种比以下更清洁的方法:

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

答案 2 :(得分:23)

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

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

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

答案 3 :(得分:6)

请参阅JavaDoc

  

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

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

答案 4 :(得分:6)

Java的Calendar表示不是最好的,他们正在为Java 8工作。我建议你使用Joda Time或其他类似的库。

以下是使用Joda Time库中的LocalDate的简单示例:

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

Here您可以按照快速入门教程进行操作。

答案 5 :(得分:-1)

在处理日期,时间戳和持续时间时,让您的生活更轻松。使用

中的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

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