كيفية تحويل nanoseconds إلى ثوان باستخدام الحول القزلي Enum؟

StackOverflow https://stackoverflow.com/questions/924208

  •  06-09-2019
  •  | 
  •  

سؤال

كيفية تحويل قيمة من nanoseconds إلى ثوان؟

إليك شريحة التعليمات البرمجية:

import java.io.*;
import java.util.concurrent.*; 
..

class Stamper { 

public static void main (String[] args) { 
long start = System.nanoTime(); 
//some try with nested loops 
long end = System.nanoTime(); 
long elapsedTime = end - start;

System.out.println("elapsed: " + elapsedTime + "nano seconds\n");

//convert to seconds 
TimeUnit seconds = new TimeUnit(); 
System.out.println("which is " + seconds.toSeconds(elapsedTime) + " seconds"); 
}}

الخطأ هو

Stamper.java:16:  enum types may not be instantiated.

ماذا يعني هذا؟

هل كانت مفيدة؟

المحلول

حسنا، يمكنك فقط تقسيم 1،000،000،000:

long elapsedTime = end - start;
double seconds = (double)elapsedTime / 1_000_000_000.0;

كما ترى TimeUnit لتحويل، ستحصل على نتيجة طويلة، لذلك ستفقد الدقة العشرية ولكن الحفاظ على دقة الأرقام بالكامل.

نصائح أخرى

TimeUnit العادة

التعبير التالي يستخدم TimeUnit Enum (Java 5 والإصدارات الأحدث) للتحويل من Nanoseconds إلى ثوان:

TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS)

تعاني مؤقتة، لذلك لا يمكنك إنشاء واحدة جديدة.

سيحول ما يلي 10000000000NS إلى ثوان.

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

للحد من الشعير، يمكنك استخدام استيراد ثابت:

import static java.util.concurrent.TimeUnit.NANOSECONDS;

ومن الآن فصور فقط النوع

NANOSECONDS.toSeconds(elapsedTime);

يجب ان تكتب :

    long startTime = System.nanoTime();        
    long estimatedTime = System.nanoTime() - startTime;

قد يؤدي تعيين وقت الانتظار في متغير إلى عدد قليل من nanoseconds. في هذا النهج سوف تحصل على الوقت المنقضي بالضبط.

وثم:

TimeUnit.SECONDS.convert(estimatedTime, TimeUnit.NANOSECONDS)

سيؤدي ذلك إلى تحويل وقت إلى ثوان بتنسيق مزدوج، وهو أكثر دقة من قيمة عدد صحيح:

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top