Как измерить промежуток времени в секундах с помощью System.currentTimeMillis()?

Как преобразовать System.currentTimeMillis(); в секунды?

long start6=System.currentTimeMillis();
System.out.println(counter.countPrimes(100000000)+" for "+start6);

Консоль показывает мне 5761455 for 1307816001290. Я не могу прочитать, сколько секунд.

Любая помощь?


person J13t0u    schedule 11.06.2011    source источник
comment
Попробуйте Instant будет более понятно: long s = Instant.now().getEpochSecond();   -  person free斩    schedule 05.01.2017


Ответы (8)


long start = System.currentTimeMillis();
counter.countPrimes(1000000);
long end = System.currentTimeMillis();

System.out.println("Took : " + ((end - start) / 1000));

ОБНОВЛЕНИЕ

Еще более точным решением будет:

final long start = System.nanoTime();
counter.countPrimes(1000000);
final long end = System.nanoTime();

System.out.println("Took: " + ((end - start) / 1000000) + "ms");
System.out.println("Took: " + (end - start)/ 1000000000 + " seconds");
person Nico Huysamen    schedule 11.06.2011
comment
Время в наносекундах необходимо разделить на 10^9 (1000000000) для отображения в секундах. Не могу отредактировать ответ, так как мне нужно вставить только 3 символа вместо необходимых 6. :] - person Lilienthal; 02.05.2013
comment
Извините, хотел, чтобы это было ms вместо s. Спасибо, что заметили это. - person Nico Huysamen; 02.05.2013
comment
Зачем кому-то использовать nanoTime() вместо currentTimeMillis(), когда результат нужен в секундах? - person Uooo; 02.05.2013
comment
Я не учел этого. Мне все равно было приятно узнать о существовании nanoTime, так как это было бы гораздо полезнее в сценариях, где необходимо синхронизировать или регистрировать множество больших объемов операций. - person Lilienthal; 02.05.2013
comment
@Uooo currentTimeMillis() — это время стены, а nanoTime() — прошедшее время с высоким разрешением. Есть небольшая разница в них и их назначении. На nanoTime() не влияют настройки локального времени, поправки часов и тому подобное, а разница более позднего и более раннего вызовов гарантированно никогда не будет отрицательной (на одной и той же виртуальной машине, в одном и том же цикле питания). Для currentTimeMillis() такой гарантии нет. Используйте currentTimeMillis(), чтобы ответить с текущими настройками времени, сколько времени прошло с 1 января 1970 года, а не сколько времени прошло с тех пор, как я в последний раз вызывал эту функцию. - person FPGA warrior; 19.04.2017

TimeUnit

Используйте TimeUnit enum, встроенный в Java 5 и более поздние версии.

long timeMillis = System.currentTimeMillis();
long timeSeconds = TimeUnit.MILLISECONDS.toSeconds(timeMillis);
person JH.    schedule 12.06.2011
comment
Вау, раньше не слышал о TimeUnit. - person chakrit; 09.07.2013
comment
похоже, у меня не работает: O, не могли бы вы помочь? Это все еще дает мне результат, такой же, как System.currentTimeMillis() - person NeverGiveUp161; 25.02.2015
comment
Не слышал о таком методе, прикольно. Но вы теряете точность, когда 1500 мс преобразуются в 1 секунду, что не очень приятно. - person Peter Clause; 17.03.2016
comment
@PeterClause Конечно, вы теряете разрешение при переходе от долей секунд к целым секундам. Что еще вы ожидаете? - person Basil Bourque; 22.01.2017

вот так:

(int)(milliseconds / 1000)
person Stas Jaro    schedule 11.06.2011

Из вашего кода может показаться, что вы пытаетесь измерить, сколько времени заняло вычисление (в отличие от попытки выяснить, что такое текущее время).

В этом случае вам нужно вызвать currentTimeMillis до и после вычисления, взять разницу и разделить результат на 1000, чтобы преобразовать миллисекунды в секунды.

person NPE    schedule 11.06.2011

Java 8 теперь предоставляет наиболее лаконичный метод для получения текущей временной метки Unix:

Instant.now().getEpochSecond();
person Scadge    schedule 29.11.2016

Я написал следующий код в моем последнем задании, это может вам помочь:

// A method that converts the nano-seconds to Seconds-Minutes-Hours form
private static String formatTime(long nanoSeconds)
{
    int hours, minutes, remainder, totalSecondsNoFraction;
    double totalSeconds, seconds;


    // Calculating hours, minutes and seconds
    totalSeconds = (double) nanoSeconds / 1000000000.0;
    String s = Double.toString(totalSeconds);
    String [] arr = s.split("\\.");
    totalSecondsNoFraction = Integer.parseInt(arr[0]);
    hours = totalSecondsNoFraction / 3600;
    remainder = totalSecondsNoFraction % 3600;
    minutes = remainder / 60;
    seconds = remainder % 60;
    if(arr[1].contains("E")) seconds = Double.parseDouble("." + arr[1]);
    else seconds += Double.parseDouble("." + arr[1]);


    // Formatting the string that conatins hours, minutes and seconds
    StringBuilder result = new StringBuilder(".");
    String sep = "", nextSep = " and ";
    if(seconds > 0)
    {
        result.insert(0, " seconds").insert(0, seconds);
        sep = nextSep;
        nextSep = ", ";
    }
    if(minutes > 0)
    {
        if(minutes > 1) result.insert(0, sep).insert(0, " minutes").insert(0, minutes);
        else result.insert(0, sep).insert(0, " minute").insert(0, minutes);
        sep = nextSep;
        nextSep = ", ";
    }
    if(hours > 0)
    {
        if(hours > 1) result.insert(0, sep).insert(0, " hours").insert(0, hours);
        else result.insert(0, sep).insert(0, " hour").insert(0, hours);
    }
    return result.toString();
}

Просто конвертируйте наносекунды в миллисекунды.

person Eng.Fouad    schedule 11.06.2011

Для преобразования миллисекунд в секунды, поскольку 1 секунда = 10³ миллисекунд:

//here m will be in seconds
long m = System.currentTimeMillis()/1000;

//here m will be in minutes
long m = System.currentTimeMillis()/1000/60; //this will give in mins
person Manvendra_0611    schedule 16.10.2015

person    schedule
comment
То, что вы оставили для ясности, довольно запутанно... возможно, вам следует отредактировать свой пост и объяснить это. - person Beau Grantham; 03.10.2012
comment
Этот код просто делит m на 1000. Делать это с логарифмом, радианами и показателями степени было для вашего удовольствия от чтения. - person freeideas; 22.08.2013
comment
System.out.println( "seconds: s" ); печатает литерал 's' - person php_coder_3809625; 03.03.2016