كيفية تحويل nanoseconds إلى ثوان باستخدام الحول القزلي Enum؟
سؤال
كيفية تحويل قيمة من 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;
لا تنتمي إلى StackOverflow