hib*_*ate 46 java calendar date
根据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();
但是,我想用更短的东西替换它(理想情况下是一到两行).
aio*_*obe 74
你可以使用:new GregorianCalendar(theYear, theMonth, theDay).getTime()
public GregorianCalendar(int year, int month, int dayOfMonth)使用默认区域设置在默认时区中设置给定日期的GregorianCalendar构造.
tan*_*ens 22
你可以用
new SimpleDateFormat( "yyyyMMdd" ).parse( "20100520" )
Sea*_*wen 14
这是使用Joda Time的另一个原因
new DateMidnight(2010, 3, 5)
DateMidnight现已弃用,但使用Joda Time可以实现相同的效果 DateTime
DateTime dt = new DateTime(2010, 3, 5, 0, 0);
mar*_*ton 10
Calendar有一个set()方法,可以在一次调用中设置年,月和日:
myCal.set( theYear, theMonth, theDay );
LocalDate.of( 2015 , Month.JUNE , 7 )  // Using handy `Month` enum. 
…或者…
LocalDate.of( 2015 , 6 , 7 )  // Sensible numbering, 1-12 for January to December. 
Java 8 及更高版本中内置的 java.time 框架取代了麻烦的旧类 java.util.Date/.Calendar。
java.time 类使用不可变对象。所以它们本质上是线程安全的。您将不会遇到其他答案中提到的任何线程安全问题。
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 );
AnInstant是 java.time 中的一个基本类,代表 UTC 时间线上的一个时刻。Instant在 Date 上提供一个to 静态方法以进行转换。
Instant instant = zdt.toInstant();
java.util.Date utilDate = java.util.Date.from( instant );
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
您可以直接与您的数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC 驱动程序。不需要字符串,不需要类。java.sql.*
从哪里获得 java.time 类?
该ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如Interval,YearWeek,YearQuarter,和更多。
你为什么不写一个简单的实用工具方法:
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);
| 归档时间: | 
 | 
| 查看次数: | 128454 次 | 
| 最近记录: |