根据Java API,构造Date(year, month, day)
折旧。我知道我可以用下面的代码替换它:
Calendar myCal = Calendar.getInstance();
myCal.set(Calendar.YEAR, theYear);
myCal.set(Calendar.MONTH, theMonth);
myCal.set(Calendar.DAY_OF_MONTH, theDay);
Date theDate = myCal.getTime();
不过,我想的东西用更短(最好一到两条线路)来代替它。
你可以使用new GregorianCalendar(theYear, theMonth, theDay)
.getTime()
:
public GregorianCalendar(int year, int month, int dayOfMonth)
用给定的日期与默认语言环境的时区设置的GregorianCalendar。
你可以使用
new SimpleDateFormat( "yyyyMMdd" ).parse( "20100520" )
这是又一个理由使用Joda Time
new DateMidnight(2010, 3, 5)
DateMidnight现在已经过时,但同样的效果可与乔达时间DateTime
实现
DateTime dt = new DateTime(2010, 3, 5, 0, 0);
日历具有可设定的年,月,日,月,在一次调用set()方法:
myCal.set( theYear, theMonth, theDay );
你为什么不只是写一个简单的工具方法:
public final class DateUtils {
private DateUtils() {
}
public static Calendar calendarFor(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month);
cal.set(Calendar.DAY_OF_MONTH, day);
return cal;
}
// ... maybe other utility methods
}
然后调用这个无处不在你的代码的其余部分:
Calendar cal = DateUtils.calendarFor(2010, Calendar.MAY, 21);
LocalDate.of( 2015 , Month.JUNE , 7 ) // Using handy `Month` enum.
…要么…
LocalDate.of( 2015 , 6 , 7 ) // Sensible numbering, 1-12 for January to December.
该java.time框架构建在Java 8和更高版本取代了麻烦的老班,java.util.Date/.Calendar。
该java.time类使用immutable objects。因此,他们本质上是线程安全的。您将有没有对其他的答案中提到的thread-safety问题。
LocalDate
该框架包括日期,只有对象的一类,没有任何时间的日或时区,LocalDate
。请注意,时区(ZoneId
)必须确定一个日期。
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
您可以实例化的具体日期。需要注意的是月数为1-12不像老班一个合理的范围内。
LocalDate localDate = LocalDate.of( 2015 , 6 , 7 );
或者使用枚举,Month
。
LocalDate localDate = LocalDate.of( 2015 , Month.JUNE , 7 );
最好避免老日期时间类。但是,如果你一定要,你可以转换。呼叫加入到老班,以方便转换新方法。
在这种情况下,我们需要指定一个时间的日与我们的约会,只值一起去,被合并为一个java.util.Date
对象。当日初刻有可能是有道理的。让java.time确定第一时刻的时间,因为它并不总是00:00:00.0
。
我们还需要指定一个时间区间中,随着该日期的时区不同。
ZoneId zoneId = zoneId.of( "America/Montreal" );
ZonedDateTime zdt = localDate.atStartOfDay( zoneId );
一个Instant
是java.time一个基本类,代表UTC时间线上的时刻。饲料的Instant
静态方法上的日期转换。
Instant instant = zdt.toInstant();
java.util.Date utilDate = java.util.Date.from( instant );
该java.time框架是建立在Java 8和更高版本。这些类取代的麻烦老legacy日期时间类,如java.util.Date
,Calendar
,与SimpleDateFormat
。
该项目Joda-Time,现在在maintenance mode,建议迁移到java.time类。
要了解更多信息,请参见Oracle Tutorial。和搜索堆栈溢出了很多例子和解释。规格是JSR 310。
您可以直接与数据库交换java.time对象。使用符合JDBC driver或更高版本的JDBC 4.2。无需串,没有必要java.sql.*
类。
从哪里获取java.time类?
该项目ThreeTen-Extra与java.time其他类延伸。该项目是为将来可能增加的java.time试验场。您可以在这里找到一些有用的类,如Interval
,YearWeek
,YearQuarter
和more。
Date date = new DateTime(2014, 6, 20, 0, 0).toDate();
日期时间是从Joda.org https://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html
使用构造Date(year,month,date)
用Java 8被弃用:
Date date = new Date(1990, 10, 26, 0, 0);
最好的办法是使用SimpleDateFormat
DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
Date date = format.parse("26/10/1985");
您需要导入import java.text.SimpleDateFormat;