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

JAV*_*eek 81 java time calendar date

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());  
Run Code Online (Sandbox Code Playgroud)

输出是:

1988年
1月25 日星期三00:00:08 IST 1989

我过去25 12 1988但我得到了25 Jan 1989.为什么?

JB *_*zet 98

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

c.set(year, month - 1, day, 0, 0);  
Run Code Online (Sandbox Code Playgroud)

  • 那个月需要什么样的人才能以零为基础? (39认同)
  • IBM API设计人员,JavaScript API设计人员.除此之外,可能没有人.请注意,日历现在已被Java 8 java.time API废弃,这是正确的做法. (5认同)

Fre*_*ula 58

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

Date date = new GregorianCalendar(year, month - 1, day).getTime();
Run Code Online (Sandbox Code Playgroud)

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

calendar.set(year, month - 1, day, 0, 0);
Run Code Online (Sandbox Code Playgroud)

  • 可以使用“日历”常量指定月份,例如。日历2月。 (4认同)

Prz*_*mek 23

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
Run Code Online (Sandbox Code Playgroud)

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

LocalDate.parse("2015-12-22").atStartOfDay() //2015-12-22T00:00
Run Code Online (Sandbox Code Playgroud)


zw3*_*324 6

请参阅JavaDoc:

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

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


Fdi*_*eal 6

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

以下是使用Joda Time库中的LocalDate的快速示例:

LocalDate localDate = new LocalDate(year, month, day);
Date date = localDate.toDate();
Run Code Online (Sandbox Code Playgroud)

在这里,您可以按照快速入门教程.