java se / java中是否有任何内置类表示任意“时间分辨率”;例如每小时,每秒,所有10分钟等?
答案 0 :(得分:8)
答案 1 :(得分:2)
您可以随时降低时间分辨率,例如
long millis = System.currentTimeMillis();
long seconds = millis / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
所以,如果你想要半小时,你可以使用
long halfHour = System.currentTimeMillis() / (30 * 60 * 1000L)
答案 2 :(得分:0)
如果您只想表示某种时间粒度,例如小时与分钟与秒,accepted Answer by Kremser是正确的。 TimeUnit
枚举就是这样。但是你还有另外一个内置于Java中的选择。
ChronoUnit
请注意,Java {8及更高版本在java.time.temporal.ChronoUnit
中的值列表与TimeUnit
中的七列值相似但更长:
两个枚举,TimeUnit
& ChronoUnit
,很方便。单位之间的转换由TimeUnit
以各种方法提供。 ChronoUnit
使用between
方法计算已用时间。
如果您希望时钟以某个增量进行勾选,Clock
类提供了替代实现。
Clock.tickSeconds
- 当前时间以秒为单位递增。Clock.tickMinutes
- 当前时间以整分钟为增量。Clock.tick
- 您指定金额的当前时间增量将备用Clock
实现对象作为可选参数传递给许多java.time类,而不是使用默认时钟。
如果您有日期时间值并希望截断它以将较小的字段拖放到零,请查看truncatedTo
。您可以使用TemporalUnit
界面指定粒度,并在ChronoUnit
中找到实现。
例如,获取当前时刻,降低秒数和秒数以获得整分钟的值。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now( zoneId );
ZonedDateTime nowWholeMinutes = now.truncatedTo( ChronoUnit.MINUTES );
答案 3 :(得分:-1)
使用整数除法,简单:
long millis = System.currentTimeMillis();
将以毫秒为单位给出当前时间。
如果你想要一个值只改变每resolution
毫秒(例如每1000毫秒)的时间,你可以使用整数除法:
long resolution = 1000;
long result = millis / resolution * resolution
如果将millis除以,则在此示例中将获得秒数。 /
执行整数除法,因为millis
和resolution
都是整数变量。这与Math.floor(((float)millis) / ((float) resolution)))
相同。如果现在乘以resolution
,结果只会在达到新的分辨率单位时发生变化。
示例:让我们假设您想要一个时钟,如果到达新的5分钟块时,时间只会改变,所以一个块例如0-4分钟,5-9分钟,10-15分钟等。
5分钟是1000毫秒/秒* 60秒/分钟* 5分钟= 300000毫秒。
因此,如果您设置resolution = 300000
,result
将仅对每个5分钟块进行一次更改。
对于millis = 0-299999,结果= 0。对于millis = 300000-599999,结果= 5,等等。你猜对了。