我有一个类型的变量java.util.Date.
如何将时间部分设置为00:00:00?
我不允许使用Apache Commons库或JodaTime.这java.util.Calendar可能是我唯一的选择.
Sio*_*733 30
要Date完全从对象中删除时间,您可以使用:
public static Date removeTime(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
Run Code Online (Sandbox Code Playgroud)
Date将要修改的对象传递给方法,它将返回Date没有小时/分钟等的对象.
如果不需要更改Date对象本身,请使用SimpleDateFormat.按照您想要的方式设置格式即.删除小时/分钟.然后调用format方法并传入Date要更改的对象.
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy");
System.out.println(sdf.format(yourDate));
Run Code Online (Sandbox Code Playgroud)
如果你的意思是在旧的遗留对象中的UTC午夜java.util.Date......
java.util.Date.from(
OffsetDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
LocalTime.MIN ,
ZoneOffset.UTC
).toInstant()
)
Run Code Online (Sandbox Code Playgroud)
如果可能,丢弃Date上面的遗留部分,只使用现代java.time.OffsetDateTime或java.time.Instant对象......
OffsetDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
LocalTime.MIN ,
ZoneOffset.UTC
).toInstant()
Run Code Online (Sandbox Code Playgroud)
如果您指的是特定时区的午夜而不是 UTC...
LocalDate.now()
.atStartOfDay()
Run Code Online (Sandbox Code Playgroud)
最好指定您想要/预期的时区,而不是隐式依赖当前默认值。
LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )
.atStartOfDay( ZoneId.of( "Pacific/Auckland" ) )
Run Code Online (Sandbox Code Playgroud)
注意:并非每个时区的每一天都有 00:00:00 的时间。夏令时可以跳到凌晨 1 点,消除午夜。
使用 java.time 类取代麻烦的旧的遗留日期时间类,例如java.util.Date和.Calendar。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate localDate = LocalDate.now( z );
ZonedDateTime zdt = localDate.atStartOfDay( z );
Run Code Online (Sandbox Code Playgroud)
您应该尽可能坚持使用现代 java.time 类。但是,如果您必须拥有旧遗留类的实例,则可以与 java.time 相互转换。寻找添加到旧类的新方法。
Calendar myLegacyCal = GregorianCalendar.from( zdt ) ;
Date myLegacyDate = Date.from( zdt.toInstant() ) ;
Run Code Online (Sandbox Code Playgroud)
如果您希望java.util.Date始终处于 UTC 时区的 具有 00:00:00 的时间,请OffsetDateTime与常量 一起使用ZoneOffset.UTC。
OffsetDateTime odt = OffsetDateTime.of( localDate , LocalTime.MIN , ZoneOffset.UTC ) ;
Date myLegacyDate = Date.from( odt.toInstant() ) ;
Run Code Online (Sandbox Code Playgroud)
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
从哪里获得 java.time 类?
该ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如Interval,YearWeek,YearQuarter,和更多。
更新:Joda-Time 项目现在处于维护模式。该团队建议迁移到 java.time 类。这部分作为历史完好无损。
使用Joda-Time 2.3,为此目的使用一种方法:withTimeAtStartOfDay()。
java.util.Date.from(
OffsetDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
LocalTime.MIN ,
ZoneOffset.UTC
).toInstant()
)
Run Code Online (Sandbox Code Playgroud)
运行时…
OffsetDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
LocalTime.MIN ,
ZoneOffset.UTC
).toInstant()
Run Code Online (Sandbox Code Playgroud)