如何从年,月和日获得Date对象?

当我使用以下代码时, Date对象是错误的。

 Date date = new Date(day.getYear(), day.getMonth(), day.getDay()); 

谁能告诉我如何从年,月和日的价值中获取日期对象?

不知道更多我不得不猜测,但可能你没有读过那个弃用的构造函数上的JavaDoc:

年减去1900年。
月份 0-11之间的月份。
日期为1-31之间的当月。

如您所见,如果您想为今天(2015年8月5日)创建日期,您需要使用new Date (115, 7, 5);

如果您看到该文档,则可以自由地猜测为何不推荐使用该文档,并且不应在任何新代码中使用。 🙂

您可以使用Calendar类来实现此目的。

 public static void main(String[] args) throws Exception { Date date = new Date (115, 7, 5); System.out.println("date = " + date); Calendar calendar = GregorianCalendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, 5); calendar.set(Calendar.MONTH, 7); calendar.set(Calendar.YEAR, 2015); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR_OF_DAY, 0); date = calendar.getTime(); System.out.println("calendar = " + date); // or create directly a new clanedar instance // thanks Tom to mention this calendar = new GregorianCalendar(2015, 7, 5); date = calendar.getTime(); System.out.println("calendar = " + date); } 

产量

 date = Wed Aug 05 00:00:00 CEST 2015 calendar = Wed Aug 05 00:00:00 CEST 2015 calendar = Wed Aug 05 00:00:00 CEST 2015 

如果你坚持使用Java <8,你可以通过一种解决方法来实现它,但它非常难看:

 java.util.Date date = new java.text.SimpleDateFormat("dd.MM.yyyy").parse("05.08.2015"); 

正如@Thomas已经说过的那样,不推荐使用日期/月/年的默认构造函数。 如果您可以访问Java8,可能需要查看此链接 。

您应该使用getDate()而不是getDay()方法来获取当天,因为getDay()返回星期几而不是月中的某一天

  • int getYear()已过时。 从JDK 1.1版开始,由Calendar.get(Calendar.YEAR) - 1900.取代Calendar.get(Calendar.YEAR) - 1900.

  • int getMonth()已过时。 从JDK 1.1版开始,由Calendar.get(Calendar.MONTH).取代Calendar.get(Calendar.MONTH).

  • int getDay()已过时。 从JDK 1.1版开始,由Calendar.get(Calendar.DAY_OF_WEEK).取代Calendar.get(Calendar.DAY_OF_WEEK).

因此使用:

Date date = new Date(Calendar.get(Calendar.YEAR) - 1900, Calendar.get(Calendar.MONTH), Calendar.get(Calendar.DAY_OF_WEEK));

推荐 :使用Joda-Time