如何获得今天的日期?

Pla*_*bit 41 java date

换句话说,我想要提供Joda-Time的功能:

today = today.withTime(0, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

但是没有Joda-Time,只能使用java.util.Date.

不推荐使用.setHours()等方法.有更正确的方法吗?

Boz*_*zho 55

Date today = new Date();
today.setHours(0); //same for minutes and seconds
Run Code Online (Sandbox Code Playgroud)

由于不推荐使用这些方法,因此可以使用以下方法Calendar:

Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 0); // same for minutes and seconds
Run Code Online (Sandbox Code Playgroud)

如果你最后需要一个Date对象,只需打电话today.getTime()


Tom*_*icz 12

Date today = DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
Run Code Online (Sandbox Code Playgroud)

来自Apache Commons-Lang的DateUtils.提防时区!


Bas*_*que 10

有更正确的方法吗?

就在这里.

LocalDate.now( 
    ZoneId.of( "America/Montreal" ) 
).atStartOfDay(
    ZoneId.of( "America/Montreal" )
)
Run Code Online (Sandbox Code Playgroud)

java.time

Java 8及更高版本现在内置了新的java.time框架.请参阅教程.灵感来自Joda-Time,由JSR 310定义,并由ThreeTen-Extra项目扩展.

例子

下面是一些使用java.time的示例.请注意它们如何指定时区.如果省略,则为JVM的当前默认时区.该默认值可能会有所不同,甚至在运行时的任何时刻都会发生变化,因此我建议您明确指定时区,而不是隐式依赖默认值.

以下是仅限日期的示例,没有时间或时区.

ZoneId zonedId = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( zonedId );
System.out.println( "today : " + today );
Run Code Online (Sandbox Code Playgroud)

今天:2015-10-19

以下是获取当前日期时间的示例.

ZoneId zonedId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.now( zonedId );
System.out.println( "zdt : " + zdt );
Run Code Online (Sandbox Code Playgroud)

运行时:

zdt:2015-10-19T18:07:02.910-04:00 [美国/蒙特利尔]

一天的第一时刻

该问题要求将时间设置为零的日期时间.这假设一天中的第一个时刻总是时间,00:00:00.0但情况并非总是如此.夏令时(DST)和其他异常意味着这一天可能会在不同的时间开始,例如01:00.0.

幸运的是,java.time可以确定适合特定时区的一天中的第一时刻LocalDate::atStartOfDay.让我们看一些代码使用上面的代码LocalDate命名todayZoneId命名zoneId.

ZonedDateTime todayStart = today.atStartOfDay( zoneId );
Run Code Online (Sandbox Code Playgroud)

zdt:2015-10-19T00:00:00-04:00 [美国/蒙特利尔]

互通性

如果必须有一个java.util.Date用于尚未更新的类以使用java.time类型,请转换.调用java.util.Date.from( Instant instant )方法.

java.util.Date date = java.util.Date.from( zdt.toInstant() );
Run Code Online (Sandbox Code Playgroud)

关于java.time

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,和更多.


Pon*_*ios 8

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));
Run Code Online (Sandbox Code Playgroud)

这里找到


Dan*_*olo 6

如果您想要当前日期的午夜(0:00 am),您可以使用默认构造函数并将时间部分清零:

Date today = new Date();
today.setHours(0); today.setMinutes(0); today.setSeconds(0);
Run Code Online (Sandbox Code Playgroud)

编辑:更新,Calendar因为这些方法已被弃用

Calendar today = Calendar.getInstance();
today.clear(Calendar.HOUR); today.clear(Calendar.MINUTE); today.clear(Calendar.SECOND);
Date todayDate = today.getTime();
Run Code Online (Sandbox Code Playgroud)