当前位置: 首页 > 知识库问答 >
问题:

Java 8 instant.now()具有纳秒分辨率?

祁正阳
2023-03-14
Instant instant = Instant.now();
System.out.println(instant);
System.out.println(instant.getNano());
2013-12-19T18:22:39.639Z
639000000

共有1个答案

鲁滨海
2023-03-14

虽然默认的Java8时钟不提供纳秒级分辨率,但您可以将其与Java功能结合起来,以纳秒级分辨率测量时间差,从而创建一个实际的纳秒级时钟。

public class NanoClock extends Clock
{
    private final Clock clock;

    private final long initialNanos;

    private final Instant initialInstant;

    public NanoClock()
    {
        this(Clock.systemUTC());
    }

    public NanoClock(final Clock clock)
    {
        this.clock = clock;
        initialInstant = clock.instant();
        initialNanos = getSystemNanos();
    }

    @Override
    public ZoneId getZone()
    {
        return clock.getZone();
    }

    @Override
    public Instant instant()
    {
        return initialInstant.plusNanos(getSystemNanos() - initialNanos);
    }

    @Override
    public Clock withZone(final ZoneId zone)
    {
        return new NanoClock(clock.withZone(zone));
    }

    private long getSystemNanos()
    {
        return System.nanoTime();
    }
}

使用它很简单:只需向instant.now()提供额外的参数,或者直接调用clock.instant():

    final Clock clock = new NanoClock();   
    final Instant instant = Instant.now(clock);
    System.out.println(instant);
    System.out.println(instant.getNano());

尽管这种解决方案即使每次都重新创建NanoClock实例也可能起作用,但最好还是坚持使用在代码早期初始化的存储时钟,然后在需要的地方使用它。

 类似资料:
  • 这个问题我已经研究了一段时间,但我只能得到秒数,下面是给我的说明:编写一个程序,从代表纳秒数的标准输入中读取一个非负整数。然后,程序编写一行输出,给出等效的天、小时、分钟、秒、毫秒、微秒和纳秒的数量。例如,输入为123456789123456789。则输出为:123456789123456789纳秒等于1428天、21小时、33分钟、9秒、123毫秒、456微秒和789纳秒。这是我写的: }

  • 问题内容: 我正在将一个最初为Win32 API编写的游戏移植到Linux(很好,是将Win32端口的OS X端口移植到Linux)。 自程序启动以来,我已经通过提供uSeconds来实现: 再加上恒定的1000000作为频率,可以 在我的机器上 很好地工作,并为我提供了一个自程序启动以来包含的64位变量。 这 是便携式的吗? 我不想发现以某种方式或类似方式编译内核时,它的工作原理有所不同。我可以

  • 我已经添加了一个图像作为画布子级,该图像只是一个布局,以装备UI文本元素,如下图所示。 在这里,黑色的轮廓是图像,红色的轮廓是它们的边界,我们可以在编辑器中看到,蓝色的文本是用户界面文本元素,锚预设底部拉伸,右=100。画布渲染模式是屏幕叠加,按屏幕大小缩放,参考分辨率为1920x1080。因此,在图1中,用户界面文本在中间,但在图2(不同的分辨率)中,它看起来不像在中间。

  • 问题内容: 在Windows下,有一些方便的功能,如from 可以创建高分辨率计时器。Linux有类似的东西吗? 问题答案: 在此之前ows-queryperformancecounter-on-osx)有人问过它-但是基本上,您可以使用boostptime函数,或者可以基本实现相同目的的POSIX clock_gettime()函数。

  • 问题内容: 当我使用读取Java文件的时,返回值被截断为整秒。我知道这可以在其他系统上获得毫秒级的mtimes,所以我的可能有什么不同? 这是一个完整的独立测试,可以编译并运行: 输出为(带有我的特定测试文件),而显示: 我希望Java输出是。 我在ext4的Linux上运行。我同时尝试了openjdk 1.7和Oracle jdk 1.8。 问题答案: 通过此提交,在Java 8中添加了在* n

  • 问题内容: 这是我的代码: 是否可以在日期格式中添加毫秒和纳秒? 问题答案: 您可以通过在末尾添加来添加毫秒数,例如格式为。 毫微秒内没有参考。通常用于性能调试,而不用于显示目的。