Java日历获取当前日期,没有小时,分钟,秒和毫秒,以毫秒为单位

jus*_*ser 20 java calendar

我想以毫秒为单位获取当前日期,只有年,月和日期.但是当我使用这段代码时:

Calendar cal = Calendar.getInstance();
cal.clear(Calendar.HOUR);
cal.clear(Calendar.MINUTE);
cal.clear(Calendar.SECOND);
cal.clear(Calendar.MILLISECOND);
currentDate = cal.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)

我仍然以毫秒为单位获得时间.我怎样才能解决这个问题?

//安德烈

Fre*_*red 50

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
currentDate = cal.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)

请注意日历的时区.


Aln*_*tak 8

如果你只想要这个相对于GMT并明确只需要几毫秒,你可以使用这个:

long now = System.currentTimeMillis();
long today = now - now % 86400000;
Run Code Online (Sandbox Code Playgroud)


smp*_*p7d 6

来自javadoc:HOUR_OF_DAY,HOUR和AM_PM字段是独立处理的,并且应用了时间的解析规则.清除其中一个字段不会重置此日历的小时值.使用set(Calendar.HOUR_OF_DAY,0)重置小时值.

cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Run Code Online (Sandbox Code Playgroud)

可能还需要设置AM/PM


Bas*_*que 5

tl; dr

LocalDate.now()
Run Code Online (Sandbox Code Playgroud)

LocalDate

如果您实际上想要的只是没有时间的日期,请使用LocalDateclass。

LocalDate级表示没有时间一天和不同时区的日期,唯一的价值。

时区对于确定日期至关重要。在任何给定的时刻,日期都会在全球范围内变化。例如,法国巴黎午夜过后的几分钟是新的一天,而在魁北克蒙特利尔仍然是“昨天” 。

指定适当的时区名称,格式continent/region,如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用3-4个字母的缩写,例如EST或,IST因为它们不是真实的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
Run Code Online (Sandbox Code Playgroud)

ZonedDateTime

如果要将日期设置为一天中的第一时间,请询问java.time为您确定该时刻。不要假定第一时刻是在00:00:00。诸如夏令时之类的异常现象意味着第一时刻可能会在其他时间(例如01:00:00)发生。

使用该时区对象ZoneId生成一个ZonedDateTime对象。

ZonedDateTime zdt = today.atStartOfDay( z );  // Determine the first moment of the day on this date for this time zone.
Run Code Online (Sandbox Code Playgroud)

要将同一时刻作为UTC中的值查看,请提取一个Instant对象。

Instant instant = zdt.toInstant();
Run Code Online (Sandbox Code Playgroud)

避免使用旧的日期时间类

避免使用麻烦的旧日期时间类,例如Calendar。这些现在已被遗留,由java.time类取代。


关于java.time

java.time框架是建立在Java 8和更高版本。这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar,和SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参见Oracle教程。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

在哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多