如何将System.nanoTime的结果转换为Java中的日期?

9 java date nanotime

我想将结果转换System.nanoTime()为日期.

public void tempBan(Player p, Player banner, int timeInSeconds){
    Long timeInNano = (long) (timeInSeconds * 10^9);
    int newTime = (int) (System.nanoTime() + timeInNano);
    // here I want to convert newTime to a date 
}
Run Code Online (Sandbox Code Playgroud)

我已经通过乘以10 ^ 9将秒转换为纳秒.现在我需要将当前系统时间加上我转换为纳秒的参数转换为日期.

Cel*_*ggs 12

不幸的是,System.nanoTime()这不是你想要的.

引用JavaDoc:

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关.返回的值表示纳秒,因为某些固定但任意的原始时间(可能在将来,因此值可能为负).在Java虚拟机的实例中,此方法的所有调用都使用相同的原点; 其他虚拟机实例可能使用不同的来源.

您可能想要System.currentTimeMillis(),在这种情况下,您可以使用new Date(System.currentTimeMillis() + milliseconds)该日期获取该毫秒数的日期.

然后您可以减去System.nanoTime(),缩放值,并添加System.currentTimeMillis()以获得类似的结果...因为您System.nanoTime()无论如何都要添加,因此具有原始秒数,您可以直接使用System.currentTimeMillis().