替换java.util.Date(年,月,日)的可接受方式是什么

dag*_*agw 29 java calendar date

我正在尝试做一些非常简单的事情,但是开始意识到Java中的日期有点像雷区.我想要的是通过三个整数组(一年,一个月和一个日期)创建一些Date对象,对它们做一些简单的测试(沿着日期B之前的日期B和1990年1月1日之后的行),转换它们java.sql.Date通过JDBC传递给对象并传递给数据库.

一切都非常简单,使用java.util.Date(int year,int month,int day)构造函数工作正常.当然这个构造函数是折旧的,我想避免在我写的新代码中使用折旧调用.然而,解决这个简单问题的所有其他选项似乎都很愚蠢.没有使用折旧的构造函数,真的没有简单的方法可以做我想做的事情吗?

我知道所有Java日期相关问题的标准答案是"使用joda时间",但我真的不想开始在第三方库中找到这样一个看似微不足道的问题.

Joã*_*lva 41

想法是使用Calendar类,如下所示:

Calendar cal = Calendar.getInstance();
cal.set(year, month, date);
Date date = cal.getTime();
Run Code Online (Sandbox Code Playgroud)

实际上,如果你检查你提到的构造函数的Javadoc ,它正是建议的:

Date(int year, int month, int date)
          Deprecated. As of JDK version 1.1, replaced by Calendar.set(year + 1900, month, date) or GregorianCalendar(year + 1900, month, date).
Run Code Online (Sandbox Code Playgroud)

或者......使用JodaTime :-).

  • +1 JodaTime,并在发生这种情况时查看JDK 7. (4认同)
  • 这是日历中的其中一个问题 - 您将无法使用此代码获得相同的结果,因为日历将使用此代码保留其时间组件.您必须直接使用GregorianCalendar构造函数来避免时间问题,或明确清除所有时间字段. (3认同)