জাভাতে কি স্টপওয়াচ আছে?


107

জাভাতে কি স্টপওয়াচ আছে? গুগলে আমি কেবল স্টপওয়াচগুলির কোড পাই যা কার্যকর হয় না - তারা সর্বদা 0 মিলিসেকেন্ড ফেরত দেয়।

আমি খুঁজে পাওয়া এই কোডটি কাজ করে না তবে কেন তা দেখছি না।

public class StopWatch {

  private long startTime = 0;
  private long stopTime = 0;
  private boolean running = false;


  public void start() {
    this.startTime = System.currentTimeMillis();
    this.running = true;
  }


  public void stop() {
    this.stopTime = System.currentTimeMillis();
    this.running = false;
  }


  //elaspsed time in milliseconds
  public long getElapsedTime() {
    long elapsed;
    if (running) {
      elapsed = (System.currentTimeMillis() - startTime);
    } else {
      elapsed = (stopTime - startTime);
    }
    return elapsed;
  }


  //elaspsed time in seconds
  public long getElapsedTimeSecs() {
    long elapsed;
    if (running) {
      elapsed = ((System.currentTimeMillis() - startTime) / 1000);
    } else {
      elapsed = ((stopTime - startTime) / 1000);
    }
    return elapsed;
  }
}

10
এবং আপনি এটি নির্ধারণ করেন যে এটি কার্যকর হয়নি? (সম্ভবত আপনি কিছু যে কম সময় System.currentTimeMillis () নির্ভুলতা চেয়ে চালানো লাগে পরিমাপ করছি)
টি

5
আপনি কীভাবে এই ক্লাসটি পরীক্ষা করছেন তা দয়া করে কোডটি পোস্ট করুন ...
DXTR66

2
কেবলমাত্র এটি লক্ষ করতে চেয়েছিলেন যে "জাভা প্রোগ্রামিংয়ের পরিচিতি, বিস্তৃত সংস্করণ (নবম সংস্করণ)" এর পাঠ্যপুস্তকের একটি প্রশ্ন এটি।
স্যাম

2
দয়া করে currentTimeMillis()উত্পাদনের জন্য ব্যবহার করবেন না , কারণ এটি সিস্টেমের তারিখ / সময়ের সাথে আবদ্ধ এবং একঘেয়ে হওয়ার নিশ্চয়তা নেই (যেমন আপনি নেতিবাচক সময় কাটাতে পারেন)। সময় ব্যবহারের পরিমাপের জন্য nanoTime()- এটি একঘেয়ে হয়ে ওঠার জন্য গ্যারান্টিযুক্ত এবং সঠিকভাবে পরিমাপ করার উদ্দেশ্যে intended Docs.oracle.com/javase/8/docs/api/java/lang/…
নিকিতা বসিক

উত্তর:


93

আপনি একটি খুঁজে পাবেন

http://commons.apache.org/lang/

একে বলে

org.apache.commons.lang.time.StopWatch

তবে এটি মোটামুটি আপনার মতোই করে। আপনি যদি আরও নির্ভুলতার জন্য থাকেন তবে ব্যবহার করুন

System.nanoTime()

এই প্রশ্নটি এখানে দেখুন:

জাভাতে ওভারহেড পরিমাপ করার সময়


90

পেয়ারা Stopwatchক্লাস ব্যবহার করুন ।

এমন একটি বস্তু যা ন্যানোসেকেন্ডগুলিতে অতিবাহিত সময় পরিমাপ করে। System.nanoTime()কয়েকটি কারণে সরাসরি কলের পরিবর্তে এই শ্রেণিটি ব্যবহার করে অতিবাহিত সময় পরিমাপ করা দরকারী :

  • পরীক্ষার বা কার্য সম্পাদনের কারণে বিকল্প সময় উত্সটি প্রতিস্থাপন করা যেতে পারে।
  • ন্যানোটাইম দ্বারা নথিভুক্ত হিসাবে, প্রত্যাবর্তিত মানটির কোনও নিখুঁত অর্থ নেই, এবং ন্যানোটাইম দ্বারা ভিন্ন সময়ে ফিরে আসা অন্য টাইমস্ট্যাম্পের তুলনায় কেবল ব্যাখ্যা করা যেতে পারে। স্টপওয়াচ আরও কার্যকর বিমূর্ততা কারণ এটি কেবলমাত্র এই আপেক্ষিক মানগুলিই প্রকাশ করে, পরম মানগুলি নয়।
Stopwatch stopwatch = Stopwatch.createStarted();
doSomething();
stopwatch.stop(); // optional

long millis = stopwatch.elapsed(TimeUnit.MILLISECONDS);

log.info("that took: " + stopwatch); // formatted string like "12.3 ms"

2
গুয়ারা স্টপওয়াচ নিখোঁজ getStartTime(), isRunning()আপাচে অনুপস্থিত আহহহ
টু ক্রা

3
@ টোকরা আপনি যেভাবে শুরু করার সময়টি দিয়ে কী করবেন? যেহেতু এটি ন্যানো সময়, আপনি ডকসগুলিতে বর্ণিত হিসাবে এটি কোনওভাবেই অর্থবহ কোনও জন্য ব্যবহার করতে পারবেন না।
ট্রেজকাজ

1
মিলিসেকেন্ডগুলি পেতে এখন আপনি এটি ব্যবহার করুন: দীর্ঘ স্টপওয়াচ = স্টপওয়াচ.এল্যাপসড (টাইমউনিট.মিলিএসইসিএনডিএস);
পিএইচপিগুরু

এটি কোন পেয়ারা সংস্করণ? আমি 1.8 ব্যবহার করেছি এবং এটি স্টপওয়াচ ক্লাসটি খুঁজে পেল না
লেজার ইনফিনিট

58

এখন আপনি এর মতো কিছু চেষ্টা করতে পারেন:

Instant starts = Instant.now();
Thread.sleep(10);
Instant ends = Instant.now();
System.out.println(Duration.between(starts, ends));

আউটপুট আইএসও 8601 এ রয়েছে।


1
দ্রুত এবং সহজ, আপনাকে অনেক ধন্যবাদ! শুরু থেকে টাস্কের সময়কালের ট্র্যাক রাখতে সহায়তা করে।
এনডিএম 13

ঘুমের সময় আপনি যদি সিস্টেমের সময় পরিবর্তন করেন?
পিটার

1
@ পিটার এটির একটি উদাহরণ। আপনি যদি একটি লিনাক্স বাক্সে থাকেন তবে আপনাকে অবশ্যই হার্ডওয়্যার ক্লক এবং কার্নেল পরিচালিত ঘড়িটি মোকাবেলা করতে হবে। আপনি যদি হার্ডওয়্যার ক্লকটি পরিবর্তন করেন তবে কোনওটি প্রভাবিত হবে না তবে কার্নেল পরিচালিত ঘড়িতে আপনি সমস্যায় পড়বেন: ইনস্ট্যান্ট.নো () সিস্টেমের সময় পান এবং একটি ভুল সময়ের ব্যবধান দেখান।
ভল্টোনি বোয়াভেন্তুরা

এমনকি আমি জানতাম না এটি অ্যান্ড্রয়েডে কাজ করে। জেনে রাখা ভাল :)
ভালটোনী বোয়াভেন্তুরা

জাভা.টাইমকে ভুলে যাবেন না n তাড়াতাড়ি স্থাবর ও থ্রেড নিরাপদ :)
আমোস কোসগেই

38

স্প্রিং একটি মার্জিত org.springframework.util.StopWatchক্লাস সরবরাহ করে (স্প্রিং-কোর মডিউল)।

StopWatch stopWatch = new StopWatch();
stopWatch.start();
     // Do something
stopWatch.stop();
     System.out.println(stopWatch.getTotalTimeMillis());

8

ব্যবহার করুন System.currentTimeMillis()শুরুর সময় এবং শেষ সময় পান এবং পার্থক্য গণনা করা হবে।

class TimeTest1 {
  public static void main(String[] args) {

    long startTime = System.currentTimeMillis();

    long total = 0;
    for (int i = 0; i < 10000000; i++) {
      total += i;
    }

    long stopTime = System.currentTimeMillis();
    long elapsedTime = stopTime - startTime;
    System.out.println(elapsedTime);
  }
} 

এই টিউটোরিয়াল আরও তথ্য


অন্য কোথাও যেমন বলা হয়েছে, কারেন্টটাইমমিলিস () সিস্টেমের তারিখ / সময়ের সাথে আবদ্ধ এবং একঘেয়ে হওয়ার নিশ্চয়তা নেই (উদাহরণস্বরূপ আপনি নেতিবাচক অতিবাহিত সময় পেতে পারেন)।
অলিগোফ্রেন

8

কোড কাজ করে না কারণ এর মধ্যে ব্যায়িত পরিবর্তনশীল getElapsedTimeSecs()নয় একটি floatবা double


7

স্টপওয়াচ ইউটিলিটিতে কোনও বিল্ট নেই তবে জেএসআর -310 (জাভা 8 সময়) হিসাবে আপনি এটি সহজভাবে করতে পারেন।

ZonedDateTime now = ZonedDateTime.now();
// Do stuff
long seconds = now.until(ZonedDateTime.now(), ChronoUnit.SECONDS);

আমি এটি সঠিকভাবে বেঞ্চমার্ক করি নি তবে অনুমান করব যে পেয়ারা স্টপওয়াচ ব্যবহার করা আরও কার্যকর।



3

স্টপ ওয়াচ ক্লাসের বাইরে সরল:

import java.time.Duration;
import java.time.Instant;

public class StopWatch {

    Instant startTime, endTime;
    Duration duration;
    boolean isRunning = false;

    public void start() {
        if (isRunning) {
            throw new RuntimeException("Stopwatch is already running.");
        }
        this.isRunning = true;
        startTime = Instant.now();
    }

    public Duration stop() {
        this.endTime = Instant.now();
        if (!isRunning) {
            throw new RuntimeException("Stopwatch has not been started yet");
        }
        isRunning = false;
        Duration result = Duration.between(startTime, endTime);
        if (this.duration == null) {
            this.duration = result;
        } else {
            this.duration = duration.plus(result);
        }

        return this.getElapsedTime();
    }

    public Duration getElapsedTime() {
        return this.duration;
    }

    public void reset() {
        if (this.isRunning) {
            this.stop();
        }
        this.duration = null;
    }
}

ব্যবহার:

StopWatch sw = new StopWatch();
sw.start();
    // doWork()
sw.stop();
System.out.println( sw.getElapsedTime().toMillis() + "ms");

3

ব্যবহার করুন: com.google.common.base.Shopwatch, এটি সহজ এবং সহজ।

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>

উদাহরণ:

Stopwatch stopwatch = new Stopwatch();
stopwatch.start();

"Do something"

logger.debug("this task took " + stopwatch.stop().elapsedTime(TimeUnit.MILLISECONDS) + " mills");

এই টাস্কটি 112 মিল নিয়েছিল


2

এটা চেষ্টা কর

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

public class millis extends JFrame implements ActionListener, Runnable
    {

     private long startTime;
     private final static java.text.SimpleDateFormat timerFormat = new java.text.SimpleDateFormat("mm : ss.SSS");
     private final JButton startStopButton= new JButton("Start/stop");
     private Thread updater;
     private boolean isRunning= false;
     private final Runnable displayUpdater= new Runnable()
         {
         public void run()
             {
             displayElapsedTime(System.currentTimeMillis() - millis.this.startTime);
         }
     };
     public void actionPerformed(ActionEvent ae)
         {
         if(isRunning)
             {
             long elapsed= System.currentTimeMillis() - startTime;
             isRunning= false;
             try
                 {
                 updater.join();
                 // Wait for updater to finish
             }
             catch(InterruptedException ie) {}
             displayElapsedTime(elapsed);
             // Display the end-result
         }
         else
             {
             startTime= System.currentTimeMillis();
             isRunning= true;
             updater= new Thread(this);
             updater.start();
         }
     }
     private void displayElapsedTime(long elapsedTime)
         {
         startStopButton.setText(timerFormat.format(new java.util.Date(elapsedTime)));
     }
     public void run()
         {
         try
             {
             while(isRunning)
                 {
                 SwingUtilities.invokeAndWait(displayUpdater);
                 Thread.sleep(50);
             }
         }
         catch(java.lang.reflect.InvocationTargetException ite)
             {
             ite.printStackTrace(System.err);
             // Should never happen!
         }
         catch(InterruptedException ie) {}
         // Ignore and return!
     }
     public millis()
         {
         startStopButton.addActionListener(this);
         getContentPane().add(startStopButton);
         setSize(100,50);
         setVisible(true);
     }
     public static void main(String[] arg)
         {
         new Stopwatch().addWindowListener(new WindowAdapter()
             {
             public void windowClosing(WindowEvent e)
                 {
                 System.exit(0);
             }
         });
         millis s=new millis();
         s.run();
     }
}

1
অন্য কোথাও যেমন বলা হয়েছে, কারেন্টটাইমমিলিস () সিস্টেমের তারিখ / সময়ের সাথে আবদ্ধ এবং একঘেয়ে হওয়ার নিশ্চয়তা নেই (উদাহরণস্বরূপ আপনি নেতিবাচক অতিবাহিত সময় পেতে পারেন)।
অলিগোফ্রেন

2

এটা চেষ্টা কর:

/*
 * calculates elapsed time in the form hrs:mins:secs
 */
public class StopWatch
{ 
    private Date startTime;

    public void startTiming()
    {
        startTime = new Date();
    }

    public String stopTiming()
    {
        Date stopTime = new Date();
        long timediff = (stopTime.getTime() - startTime.getTime())/1000L;
        return(DateUtils.formatElapsedTime(timediff));
    }

}

ব্যবহার করুন:

StopWatch sw = new StopWatch();
...
sw.startTiming();
...
String interval = sw.stopTiming();

2
ডেটইটিসগুলি অ্যাপাচি কমনের অংশ, কেন কেবল তাদের স্টপওয়াচ ব্যবহার করবেন না?
বিল এফিন মারে

বেশিরভাগ ক্ষেত্রে আপনি কিছু সাধারণ লাইব্রেরি ব্যবহার করবেন যেমন অন্যান্য উত্তরে উল্লিখিত হয়েছে (উদাহরণস্বরূপ অ্যাপাচি কমন্স)। এমনকি আপনার যদি সমস্ত কিছুর প্রয়োজন না হয় তবে আপনি কেবল লাইব্রেরির অংশগুলি নিতে পারেন।
গেয়ারাড

2

এটা চেষ্টা কর.

public class StopWatch { 

      private long startTime = 0;
      private long stopTime = 0;

      public StopWatch()
      {
            startTime = System.currentTimeMillis();
      }

      public void start() {
        startTime = System.currentTimeMillis();
      }

      public void stop() {
        stopTime = System.currentTimeMillis();
        System.out.println("StopWatch: " + getElapsedTime() + " milliseconds.");
        System.out.println("StopWatch: " + getElapsedTimeSecs() + " seconds.");
      }

      /**
       * @param process_name
       */
      public void stop(String process_name) {
            stopTime = System.currentTimeMillis();
            System.out.println(process_name + " StopWatch: " + getElapsedTime() + " milliseconds.");
            System.out.println(process_name + " StopWatch: " + getElapsedTimeSecs() + " seconds.");
      }      

      //elaspsed time in milliseconds
      public long getElapsedTime() {
          return stopTime - startTime;
      }

      //elaspsed time in seconds
      public double getElapsedTimeSecs() {
        double elapsed;
          elapsed = ((double)(stopTime - startTime)) / 1000;
        return elapsed;
      }
} 

ব্যবহার:

StopWatch watch = new StopWatch();
// do something
watch.stop();

কনসোল:

StopWatch: 143 milliseconds.
StopWatch: 0.143 seconds.

যদিও এটি যা হতে পারে যা প্রশ্নে জিজ্ঞাসা করা হয়েছিল তা হতে পারে বা নাও হতে পারে, আপনার উত্তর আমাকে আমার সমস্যাটিতে সহায়তা করেছে। ধন্যবাদ.
টয়লেটট্যাক্ক

currentTimeMillis()সিস্টেমের তারিখ / সময়ের সাথে আবদ্ধ এবং একঘেয়ে হওয়ার গ্যারান্টি নেই (যেমন আপনি নেতিবাচক সময় কাটাতে পারেন)।
অলিগোফ্রেন

আপনি যদি নিজের তৈরি করার সিদ্ধান্ত নেন তবে System.nanoTime()সর্বদা সঠিক ফলাফল পেতে ব্যবহার করুন ।
অলিগোফ্রেন

2

পারফরম্যাট্রিক্স আপনার প্রয়োজন মতো একটি সুবিধাজনক স্টপওয়াচ ক্লাস সরবরাহ করে। এটি প্রাচীর-ঘড়ির সময় এবং আরও বেশি পরিমাপ করতে পারে: আপনার প্রয়োজন হলে এটি সিপিইউ সময় (ব্যবহারকারীর সময় এবং সিস্টেমের সময় )ও পরিমাপ করে। এটি ছোট, বিনামূল্যে এবং আপনি ম্যাভেন সেন্ট্রাল থেকে ডাউনলোড করতে পারেন। আরও তথ্য এবং উদাহরণগুলি এখানে পাওয়া যাবে: https://obvj.net/performetricics

Stopwatch sw = new Stopwatch();
sw.start();

// Your code

sw.stop();
sw.printStatistics(System.out);

// Sample output:
// +-----------------+----------------------+--------------+
// | Counter         |         Elapsed time | Time unit    |
// +-----------------+----------------------+--------------+
// | Wall clock time |             85605718 | nanoseconds  |
// | CPU time        |             78000500 | nanoseconds  |
// | User time       |             62400400 | nanoseconds  |
// | System time     |             15600100 | nanoseconds  |
// +-----------------+----------------------+--------------+

আপনি যে কোনও সময় ইউনিট (ন্যানোসেকেন্ডস, মিলিসেকেন্ডস, সেকেন্ড, ইত্যাদি ...) এ মেট্রিকগুলি রূপান্তর করতে পারেন)

পিএস: আমি হাতিয়ারটির লেখক।



1

এটা চেষ্টা কর.

জাভা স্টপওয়াচ সম্পূর্ণ কার্যক্ষম সমাধান

এখানে আপনি একটি সম্পূর্ণ কাজের সমাধান পাবেন।

উপরের লিঙ্কযুক্ত সমাধান থেকে কেবল একটি স্নিপেট:

আপনি নীচের কোডের মতো একটি শ্রেণি তৈরি করতে পারেন এবং কোড বিভাগের আগে এবং পরে এই শ্রেণীর 'স্টার্ট এবং স্টপ পদ্ধতিটি ব্যবহার করতে পারেন, আপনি নেওয়া সময়টি মাপতে চান।

public class Stopwatch{
  private long startTime;
  private long stopTime;

  /**
   starting the stop watch.
  */
  public void start(){
        startTime = System.nanoTime();
  }

  /**
   stopping the stop watch.
  */
  public void stop()
  {     stopTime = System.nanoTime(); }

  /**
  elapsed time in nanoseconds.
  */
  public long time(){
        return (stopTime - startTime);
  }

  public String toString(){
      return "elapsed time: " + time() + " nanoseconds.";
  }

}

ধন্যবাদ.


1
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত উত্তর পরিবর্তিত হলে লিঙ্কযুক্ত উত্তরগুলি অবৈধ হতে পারে।
এএস ম্যাকেয়ে

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