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
。为什么呢?
答案 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 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
如果您还需要有关时间(小时,分钟,秒)的信息,请使用从LocalDate
到LocalDateTime
的某些转换
LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00
答案 3 :(得分:6)
答案 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)
在处理日期,时间戳和持续时间时,让您的生活更轻松。使用
中的HalDateTimehttp://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
您还可以指定用于解析和打印的模式。