System.nanoTime()和其他与时间相关的类

时间:2015-01-21 04:35:49

标签: java system nanotime

现在我正在为角色制作技能,我想增加冷却时间,但我不知道如何设定时间,但我想我知道它应该有哪些变量:

private long currentTime; <-- this is the actual cooldown
private long cooldownTime; <--- this is the time it must pass before its ready
private boolean onCooldown; <---- game uses this to check if its on cooldown
private long elapsed = System.nanoTime(); <-- this takes the exact time when a skill is used and is setOnCooldown.

所以这是基本变量,但我根本不知道如何设置它们,我在游戏中得到了一个update()方法,一个cast()方法。请senpais停止!为任何愿意停止n.n

的人提供巧克力饼干

1 个答案:

答案 0 :(得分:0)

TL;博士

Instant.now()
       .plus(
           Duration.ofHours( 1 ).plusMinutes( 35 )
       )

详细

不太确定你的问题,但你似乎想跟踪“冷静下来”的时间跨度,并且显然是在那段时间过去后进行测试。

使用java.time

Java 8及更高版本中的java.time类包括DurationPeriod类,用于跟踪从时间轴上未附加的时间跨度。

Duration duration = Duration.ofHours( 1 ).plusMinutes( 35 );

获取UTC中的当前时刻,其分辨率最高为nanoseconds。在Java 8中,当前时刻被捕获到milliseconds。在Java 9中,Clock的新实现捕获了Instant类的完整纳秒分辨率的当前时刻。

Instant now = Instant.now();

要确定冷却时间到期的时刻,请将Duration应用于Instant以生成另一个Instant

Instant coolDownExpires = now.plus( duration );

关于java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore