标签: nanotime

使用 Instant/ChronoUnit 在今天午夜获取 nanos-since-epoch 中的时间比使用 GregorianCalendar/Date 提前 24 小时

自 Epoch 午夜(例如 2021 年 2 月 13 日 00:00:00)以来,我试图以 nanos 获取今天的日期。

使用 GregorianCalendar/Date 似乎可以得到正确的结果。

我使用 Instant/ChronoUnit 的方式是明天午夜(例如 2021 年 2 月 14 日 00:00:00)。

这里有什么问题?

import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.TimeZone;


class scratch {

    public static void main(String[] args) {
        Calendar c = new GregorianCalendar();
        c.setTime(new Date());
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        c.setTimeZone(TimeZone.getTimeZone("UTC"));
        long dateNanos = c.getTimeInMillis() * 1000000L;

        Instant i = Instant.now().truncatedTo(ChronoUnit.DAYS);
        long instantNanos = ChronoUnit.NANOS.between(Instant.EPOCH, i);

        System.out.println("dateMillis = …
Run Code Online (Sandbox Code Playgroud)

java time date epoch nanotime

1
推荐指数
1
解决办法
135
查看次数

Java System.nanoTime经过的平均时间越来越小

这不是我第一次遇到编程语言中的时钟时间问题.基本上我通过在while循环中调用函数来测量函数的运行速度.问题是,由于某种原因,while循环运行的时间越长,经过的时间越来越短.谁能解释一下?代码如下.

DescriptiveStatistics stats = new DescriptiveStatistics();
while(true) {
    long startTime = System.nanoTime();
    executeSaxonXsltTransformation();
    long stopTime = System.nanoTime();
    long elapsedTime = stopTime-startTime;
    stats.addValue((double)elapsedTime);
    System.out.println(stats.getN()+" - "+elapsedTime+ " - "+stats.getMean());
}
Run Code Online (Sandbox Code Playgroud)

因此,经过大约1,000次运行后,经过的时间为750k至850k.但经过大约100,000次运行后,经过的时间降至580k至750k.通过观察平均值(stats.getMeans())可以最好地注意到持续减少,其中108k循环后平均值为〜632k,而3k循环平均值为~100万.切换到currentTimeMillis而不是nanoTime不会改变任何东西.

java jit jvm-hotspot nanotime

0
推荐指数
1
解决办法
509
查看次数

java - system.nanoTime()运行得太慢了

我在我的应用程序中使用system.nanoTime,并计算相对于starttime的时间.
我的应用程序运行得非常好,直到我将其复制到新计算机上并且在其上纳米时间给了我较慢的值.

我写了一个简单的应用程序,以确保.
将纳米时间与系统时间进行比较.
它在除我的新计算机之外的其他计算机中显示相同的值.有什么建议?

这是我的代码:首先我有

private long initNanoTime = System.nanoTime();
private long initTime = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)

比我循环每秒运行一次的线程:

long timeUsingNanoTime = initTime + (System.nanoTime() - initNanoTime) / 1000000;
long timeUsingMilis = System.currentTimeMillis();
long nanotimeOffset = Math.abs(timeUsingNanoTime - timeUsingMilis);
if (nanotimeOffset < 100l) ? print("close") : print(far);
Run Code Online (Sandbox Code Playgroud)

编辑:我正在使用nano因为我需要处理纳秒时间内发生的ts并将其打印到日志中的纳米时间

java nanotime

0
推荐指数
1
解决办法
1294
查看次数

时间戳(以毫秒为单位)不能正确转换为小时,分钟和秒?

下面是我的简单计时器类,它在最简单的情况下工作正常.我使用下面的计时器类来测量某些代码执行时所花费的时间.

public static class StopTimer {

    public static StopTimer getInstance() {
        return new StopTimer();
    }

    private long m_end = -1;
    private long m_interval = -1;
    private final long m_start;

    private StopTimer() {
        m_start = m_interval = currentTime();
    }

    public long getDuration() {
        long result = 0;

        final long startTime = m_start;
        final long endTime = isTimerRunning() ? currentTime() : m_end;

        result = nanoToMilliseconds(endTime - startTime);

        return result;
    }

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

    private long nanoToMilliseconds(final long nanoseconds) …
Run Code Online (Sandbox Code Playgroud)

java timestamp milliseconds nanotime

0
推荐指数
1
解决办法
523
查看次数

如何将纳秒转换为字符?

考虑这个简单的例子

DT <- data.table::data.table(mytime =  c(nanotime('2011-12-05 08:30:00.000',format ="%Y-%m-%d %H:%M:%E9S",  tz ="GMT"),
                         nanotime('2011-12-05 08:30:00.100',format ="%Y-%m-%d %H:%M:%E9S",  tz ="GMT"),
                         nanotime('2011-12-05 08:30:00.825',format ="%Y-%m-%d %H:%M:%E9S",  tz ="GMT")))
#convert the timestamp to string
DT[, mytime_character := strftime(mytime, format = '%Y-%m-%d %H:%M:%OS3')]

> DT
                                mytime        mytime_character
1: 2011-12-05T08:30:00.000000000+00:00 2011-12-05 03:30:00.000
2: 2011-12-05T08:30:00.100000000+00:00 2011-12-05 03:30:00.099
3: 2011-12-05T08:30:00.825000000+00:00 2011-12-05 03:30:00.825
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,转换nanotime时间戳character(使用strftime)创建第二时间戳的错误毫秒部分:.099代替.100

不幸的是,我需要将时间戳转换为字符串,以便其他编程语言可以吸收它们。

有没有一种方法可以将时间戳正确转换为字符而不会造成精度损失?

谢谢!

r nanotime data.table

0
推荐指数
1
解决办法
56
查看次数

标签 统计

nanotime ×5

java ×4

data.table ×1

date ×1

epoch ×1

jit ×1

jvm-hotspot ×1

milliseconds ×1

r ×1

time ×1

timestamp ×1