如何将 java.util.Date 实例的时间设置为 00:00:00?tl;博士详java.time关于 java.time城大时间
我有一个类型的变量。java.util.Date
如何将时间部分设置为 00:00:00?
我不被允许使用Apache Commons库或JodaTime。这可能是我唯一的选择。java.util.Calendar
我有一个类型的变量。java.util.Date
如何将时间部分设置为 00:00:00?
我不被允许使用Apache Commons库或JodaTime。这可能是我唯一的选择。java.util.Calendar
要从对象中完全删除时间,可以使用以下命令: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();
}
将要修改的对象传递到方法中,它将返回一个没有小时/分钟等的。Date
Date
如果不需要更改 Date 对象本身,请使用 。按照您想要的方式设置格式 ie。删除小时/分钟。然后调用 format 方法并传入要更改的对象。SimpleDateFormat
Date
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd,yyyy");
System.out.println(sdf.format(yourDate));
如果你在一个旧的遗留java.util.Date
对象中指的是UTC中的午夜...
java.util.Date.from(
OffsetDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
LocalTime.MIN ,
ZoneOffset.UTC
).toInstant()
)
如果可能的话,丢弃上面的遗留部分,只使用现代java.time.OffsetDateTime
或java.time.Instant
对象...Date
OffsetDateTime.of(
LocalDate.of( 2017 , Month.JANUARY , 23 ) ,
LocalTime.MIN ,
ZoneOffset.UTC
).toInstant()
如果你指的是特定时区的午夜而不是UTC...
LocalDate.now()
.atStartOfDay()
最好指定所需的/预期的时区,而不是隐式依赖当前默认值。
LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )
.atStartOfDay( ZoneId.of( "Pacific/Auckland" ) )
注意:并非每个时区的每天都有 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 );
你应该尽可能坚持使用现代java.time类。但是,如果您必须具有旧旧版类的实例,则可以与java.time进行转换。查看添加到旧类的新方法。
Calendar myLegacyCal = GregorianCalendar.from( zdt ) ;
Date myLegacyDate = Date.from( zdt.toInstant() ) ;
如果想要一个 始终处于 UTC 时区的时间,使其一天中的时间为 00:00:00,请使用常量 。java.util.Date
OffsetDateTime
ZoneOffset.UTC
OffsetDateTime odt = OffsetDateTime.of( localDate , LocalTime.MIN , ZoneOffset.UTC ) ;
Date myLegacyDate = Date.from( odt.toInstant() ) ;
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧旧日期时间类,如java.util.Date
,Calendar
和SimpleDateFormat
。
Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。
要了解更多信息,请参阅 Oracle 教程。搜索 Stack Overflow 以获取许多示例和解释。规格是JSR 310。
从哪里获取 java.time 类?
ThreeTen-Extra 项目通过其他类扩展了 java.time。这个项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
等。
更新:Joda-Time项目现在处于维护模式。该团队建议迁移到 java.time 类。这一部分作为历史保持不变。
使用Joda-Time 2.3,有一个方法可以达到这个目的:withTimeAtStartOfDay()。
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
DateTime now = new DateTime();
DateTime firstMomentOfToday = now.withTimeAtStartOfDay();
System.out.println( "now: " + now );
System.out.println( "firstMomentOfToday: " + firstMomentOfToday );
运行时...
now: 2013-12-05T23:00:23.785-08:00
firstMomentOfToday: 2013-12-05T00:00:00.000-08:00