টাইম ইউনাইট এনাম ব্যবহার করে কীভাবে ন্যানোসেকেন্ডগুলিকে সেকেন্ডে রূপান্তর করবেন?


145

ন্যানোসেকেন্ড থেকে একটি সেকেন্ডে কীভাবে রূপান্তর করবেন?

এখানে কোড বিভাগ:

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.

এটার মানে কি?


4
ত্রুটির অর্থ হল আপনি প্রকারটি ইনস্ট্যান্ট করতে পারবেন না TimeUtilকারণ এটি একটি enum(গণক)। আপনি যদি ব্যবহার করতে চান তবে আপনার পরিবর্তে TimeUnitব্যবহার TimeUnit.NANOSECONDS.toSeconds(elapsedTime)করা উচিত । শুভকামনা!
ড্যানিয়েল কেভিস্ট

উত্তর:


200

ঠিক আছে, আপনি কেবল 1,000,000,000 দ্বারা ভাগ করতে পারেন:

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

আপনি যদি TimeUnitরূপান্তর করতে ব্যবহার করেন, আপনি দীর্ঘ হিসাবে আপনার ফলাফল পাবেন, সুতরাং আপনি দশমিক নির্ভুলতা হারাবেন তবে পুরো সংখ্যা যথার্থতা বজায় রাখবেন।


78
তবে কী যদি দ্বিতীয়টিতে ন্যানোসেকেন্ডের সংখ্যা পরিবর্তন হয়? : পি
জিওফ্টনজ

9
এই উত্তরটি এখন ভুল হয় - convert()এবং toFoo()পদ্ধতি সব আগমন longএখন র docs.oracle.com/javase/6/docs/api/java/util/concurrent/...
Riking

3
@ এমবারোস এই উত্তরটি এখনও ঠিক আছে যে TimeUnitসমাধানের ফলে নির্দিষ্টতা হারাতে পারে। TimeUnit.SECONDS.convert(500, TimeUnit.MILLISECONDS);ফিরে আসবে 0, না 0.5। এটি কেবল আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে যেগুলির মধ্যে কোনটি ভাল।
nbrooks

17
এখানে সম্পূর্ণ @nbrooks সাথে একমত। টাইমউনাইট ব্যবহার করা সেকেন্ডের পরিবর্তে এক সেকেন্ডের ভগ্নাংশকে আউটপুট দেবে না 0. আপনি যদি হার্ড কোডড 10 ডিজিটের নম্বরটি ব্যবহার করতে না চান তবে 1E9 এর মতো কিছু ব্যবহার করুন। উদাহরণ স্বরূপ :double seconds = ((double) nanoseconds) / 1E9; আমি প্রতিটি সময় ব্যক্তিগত পছন্দ হিসাবে এটি করব।
টেকট্রিপ

3
আপনি যদি এক সেকেন্ডের ভগ্নাংশ চান তবে টাইম ইউনিট এনাম পদ্ধতিতে এই পদ্ধতিটি ব্যবহার করুন। টাইম ইউনিট এনাম ব্যবহার করা নিকটতম দ্বিতীয়টির সাথেও গোল হয় না, এটি মূলত কেবলমাত্র একটি সেকেন্ডের ভগ্নাংশ বন্ধ করে দেয়। 4.9999999, সহজ 4 হবে।
ডিক লুকাস

354

TimeUnit Enum

নিম্নলিখিত এক্সপ্রেশনটি TimeUnitন্যানোসেকেন্ড থেকে সেকেন্ডে রূপান্তর করতে এনাম (জাভা 5 এবং তার পরে) ব্যবহার করে :

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

14
এই পদ্ধতিতে একটি সেকেন্ডের ভগ্নাংশ অন্তর্ভুক্ত নয়। সুতরাং 4.9999999, 4 সেকেন্ডের হবে।
ডিক লুকাস 20

1
এটি অগ্রাধিকারপ্রাপ্ত কারণ আপনি কখনই 1 টি লিখতে পারবেন না এবং এর পরে 0 এর সম্পূর্ণ গণ্ডগোলের কারণে এটি খুব ত্রুটিযুক্ত হওয়ার কারণে থাকে।
23:58

1
আপনি এটিকে সময় কাটানোর মতো টাইপ করতে পারেন = (শেষ সময় - শুরু_কাল) / 1e9;
হাসন

1
যদি আমি 59 মিনিট এবং 50 সেকেন্ড থাকি তবে এটি এখনও 0 ঘন্টা কেটে গেছে বলে ... যা আদর্শ নয়। তাই ভগ্নাংশ নিয়ে এই পদ্ধতিটি কার্যকর করার কোনও উপায় আছে কি?
ব্যবহারকারী 1156544

58

টাইমউনিট একটি এনাম, সুতরাং আপনি একটি নতুন তৈরি করতে পারবেন না।

নিম্নলিখিত 1000000000000ns সেকেন্ডে রূপান্তর করবে।

TimeUnit.NANOSECONDS.toSeconds(1000000000000L);

4
আমি বিশ্বাস করি এটি 10e + 9 নয় 1e + 12!
অ্যাডাম আর্ল্ড

8
এটি একটি দেরী উত্তর, কিন্তু উদাহরণের মধ্যে নম্বরটি একটি সেকেন্ডে ন্যানো সংখ্যা নয়, রূপান্তর করার জন্য এটি কেবল একটি সংখ্যা। পুরো ধারণাটি সেই মানগুলি না জানার জন্য।
নিক ভেস

2
আমি মনে করি এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। টোএক্সএক্সএক্সএক্সএক্স () ব্যবহার করা কনভার্ট () ব্যবহার করা ভাল, কারণ রূপান্তর () এর সাথে রূপান্তরটি কোন দিকটি ঘটে তা স্পষ্ট নয়, অন্যদিকে টেক্সএক্সএক্সএক্সএক্স () এর সাথেই এটি।
ক্লিটোস কিরিয়াকু

21

ভার্বোসিটি হ্রাস করতে, আপনি একটি স্থিতিশীল আমদানি ব্যবহার করতে পারেন:

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

- এবং এখন থেকে টাইপ করুন

NANOSECONDS.toSeconds(elapsedTime);

6

আপনার লেখা উচিত:

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

একটি ভেরিয়েবল এন্ডটাইম নির্ধারণের ফলে কয়েকটি ন্যানোসেকেন্ড হতে পারে। এই পদ্ধতির আপনি সঠিক সময় অতিবাহিত সময় পাবেন।

এবং তারপর:

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

4

এটি একটি সময়কে দ্বিগুণ ফর্ম্যাটে রূপান্তর করবে, যা একটি পূর্ণসংখ্য মানের থেকে আরও সুনির্দিষ্ট:

double elapsedTimeInSeconds = TimeUnit.MILLISECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS) / 1000.0;

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.