Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:时间分辨率_Java_Time - Fatal编程技术网

Java:时间分辨率

Java:时间分辨率,java,time,Java,Time,JavaSE/JavaEE中是否有任何表示任意“时间分辨率”的内置类;e、 g每小时、每秒钟、所有10分钟等?您始终可以降低时间分辨率,例如 long millis = System.currentTimeMillis(); long seconds = millis / 1000; long minutes = seconds / 60; long hours = minutes / 60; 所以,如果你想每半小时一次,你可以使用 long halfHour = System.current

JavaSE/JavaEE中是否有任何表示任意“时间分辨率”的内置类;e、 g每小时、每秒钟、所有10分钟等?

您始终可以降低时间分辨率,例如

long millis = System.currentTimeMillis();
long seconds = millis / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
所以,如果你想每半小时一次,你可以使用

long halfHour = System.currentTimeMillis() / (30 * 60 * 1000L)
看看enum,你可以使用这里的单位

不要重新发明轮子


对于更复杂的时间运算,我建议使用库。

使用整数除法,它很简单:

long millis=System.currentTimeMillis()

将以毫秒为单位显示当前时间。 如果希望某个时间的值仅在每<代码>分辨率毫秒(例如每1000毫秒)更改一次,则可以使用整数除法:

long resolution = 1000;
long result = millis / resolution * resolution
如果你用结果除以毫秒,在这个例子中你会得到秒
/
进行整数除法,因为
分辨率
都是整数变量。这将与
数学地板(((浮点)毫秒)/((浮点)分辨率))相同。
。如果现在乘以
分辨率
,则仅当达到新的分辨率单位时,结果才会改变

示例:假设您想要一个时钟,其时间只有在达到新的5分钟块时才会改变,因此块为0-4分钟、5-9分钟、10-15分钟等。 5分钟是1000毫秒/秒*60秒/分钟*5分钟=300000毫秒。 因此,如果您设置
分辨率=300000
结果将仅为每5分钟一个区块更改一次。
对于毫秒=0-299999,结果=0。对于millis=300000-599999,result=5,等等,我想你应该知道了。

粒度单位 如果您的意思只是一种表示特定时间粒度的方法,例如小时与分钟与秒,那么这个方法是正确的。
TimeUnit
enum就是这个。但您还有另一个选择,它也内置在Java中

ChronoUnit
请注意,Java 8及更高版本中的值列表与
时间单位中的七个值相似,但更长:

  • 永远
  • 年代
  • 千年
  • 世纪
  • 几十年
  • 年头
  • 月份
  • 日子
  • 半天
  • 小时数
  • 会议记录
  • 米利斯
  • 微秒
  • 纳米
这两个枚举,
TimeUnit
ChronoUnit
,都很方便。
TimeUnit
以各种方式提供单位之间的转换
ChronoUnit
使用其方法计算经过的时间

时钟增量 如果您希望时钟以特定的增量滴答作响,则该类提供了替代实现

  • –当前时间以整秒为单位递增
  • –以整分钟为单位的当前时间增量
  • –当前时间以您指定的数量递增
在许多java.time类中,将替代的
时钟
实现对象作为可选参数传递,以代替默认时钟

截断值 如果您有一个日期时间值,并且希望截断它以将较小的字段降为零,请查看。您可以使用接口和中的实现来指定粒度

例如,获取当前时刻,删除秒和秒的分数,以获得整分钟的值

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now( zoneId );
ZonedDateTime nowWholeMinutes = now.truncatedTo( ChronoUnit.MINUTES );

你想完成什么?为定期执行安排任务?@JoaoSilva不,实际上我必须将这样的时间分辨率传递给服务,以便它可以对一组数据执行业务逻辑。这篇文章可能会引起您的兴趣:整数除法对于Joda来说要简单得多+1-时间单位的问题是,正如名字所说,它仅指定单位-单位数量必须单独指定。Joda的句点和持续时间类听起来很接近@Paranix想要的。@user3001:整数除法可能更简单,但时间单位是.MINUTES.toMillis(5),读起来肯定更好,意图也更清楚。@PeterŠtibraný我不清楚toMillis(5)中的5是毫秒还是纳秒或小时,据我所知,它可能返回0;)@彼得拉维:它是(5)分钟到毫秒,和你读到的完全一样:-)