জাভাতে মাইক্রোসেকেন্ডে বর্তমান সময়


104

কোন ইউনিক্স সিস্টেমে জাভাতে মাইক্রোসেকেন্ড স্তরের যথার্থতার সাথে টাইমস্ট্যাম্প পাওয়ার কোনও উপায় আছে? সি এর gettimeofdayকাজ মত কিছু ।


6
মনে রাখবেন যে কম্পিউটারের ঘড়িগুলি যথাযথতার সেই স্তরের কাছাকাছি কোথাও সেট করা নেই - বিভিন্ন কম্পিউটারে দুটি ঘড়ি সাধারণত কমপক্ষে কয়েক মিলিসেকেন্ডে পৃথক হয়ে যায়, যদি না আপনি উচ্চ-নির্ভুলতার সমন্বয় প্রক্রিয়া স্থাপনের জন্য কিছু প্রচেষ্টা না করেন তবে (যখন এই জাতীয় জিনিস এমনকি শারীরিকভাবেও সম্ভব)। আমি মাইক্রোসেকেন্ডে কম্পিউটারের সময় জানার কোন কারণ থাকতে পারে তা ভাবতে পারি না। (যদি আপনি একটি কম্পিউটারে একটি বিরতি সঠিকভাবে পরিমাপ করার চেষ্টা করছেন তবে নিশ্চিত হয়ে নিন যে এটি পুরোপুরি যুক্তিসঙ্গত, তবে আপনার পুরো টাইমস্ট্যাম্পের দরকার নেই।)
ডেভিড জেড

2
এছাড়াও, ইউনিক্স / লিনাক্সের কয়েকটি সংস্করণ কেবল মাইক্রোসেকেন্ড ক্ষেত্রে 1 মিলিসেকেন্ড বা 10 মিলিসেকেন্ড গ্রানুলারিটি দেয়।
স্টিফেন সি

অপ্রত্যক্ষভাবে জেডিবিসি হ'ল পোস্টগ্রিসের মতো কোনও ডাটাবেসের সাথে সংযুক্ত থাকলে যা বর্তমান সময়কে মাইক্রোসেকেন্ডগুলিতে ধারণ করে।
বেসিল বাউরুক

2
জাভা 9 এবং তার পরে:Instant.now()
বাসিল বাউরক

ইপচের পর থেকে মাইক্রোসেকেন্ডগুলি গণনা করতে তাত্ক্ষণিক ব্যবহার করুন: val instant = Instant.now(); val currentTimeMicros = instant.getEpochSecond() * 1000_000 + instant.getNano() / 1000;
মাইকেল এম।

উত্তর:


148

না, জাভার সেই ক্ষমতা নেই।

এটিতে System.nanoTime () রয়েছে তবে এটি পূর্বের কিছু পরিচিত সময় থেকে একটি অফসেট দেয়। সুতরাং আপনি এ থেকে নিখুঁত নম্বর নিতে পারবেন না, আপনি এটি ন্যানোসেকেন্ড (বা উচ্চতর) নির্ভুলতা পরিমাপ করতে ব্যবহার করতে পারেন।

নোট করুন যে জাভাডক বলেছেন যে এটি যখন ন্যানোসেকেন্ডের নির্ভুলতা সরবরাহ করে তবে এর অর্থ ন্যানোসেকেন্ড যথার্থতা নয়। সুতরাং রিটার্ন ভ্যালুতে কিছু পরিমাণে বৃহত মডুলাস নিন take


3
কেউ অনুমান করতে পারে যে কারণে জাভার কোনও গেটটাইম মাইক্রোসেকেন্ডস নেই () এর মধ্যে রয়েছে 1) অনেক প্ল্যাটফর্মে সঠিকতা পাওয়া যায় না, 2) মাইক্রোসেকেন্ড কলটিতে মিলিসেকেন্ড যথার্থতা ফিরিয়ে দেওয়া অ্যাপ্লিকেশন বহনযোগ্যতার সমস্যাগুলির দিকে নিয়ে যায়।
স্টিফেন সি

9
লিনাক্সে, System.nanoTime () ক্লক_জেটটাইম (CLOCK_MONOTONIC, _) কল করে। ব্রায়ান অক্সলি জাভাটির উত্স কোডটিতে এই ন্যাগেটটি সন্ধান করার জন্য খুঁড়েছিল।
ডেভিড ওয়েবার

7
এই উত্তরটি এখন পুরানো । জাভা 9 এর ওপেনজেডিকে এবং ওরাকল বাস্তবায়নগুলি একটি নতুন বাস্তবায়ন নিয়ে আসে Clockযা বর্তমান মুহুর্তটি মিলিসেকেন্ডের চেয়ে রেজোলিউশন ফাইনারের সাথে ক্যাপচার করার জন্য সরবরাহ করে। একটি ম্যাকবুক প্রো রেটিনাতে আমি বর্তমান সময়টি মাইক্রোসেকেন্ডগুলিতে (দশমিক ভগ্নাংশের ছয় অঙ্ক) পাচ্ছি। প্রকৃত ফলাফল এবং নির্ভুলতা হোস্ট কম্পিউটারের অন্তর্নিহিত ক্লক হার্ডওয়্যারের উপর নির্ভর করে।
তুলসী বাউরক

1
@ বাসিলবার্ক জাভা 8 বা তারও আগের সংস্করণগুলিতে প্রচুর সিস্টেম এখনও চালু রয়েছে কারণ সেগুলি স্থানান্তরের দরকার নেই। উত্তরটি পুরানো হওয়ার পরেও এটি কার্যকর।
ড্রাগাস

1
@Dragas বাস্তবিক, সেখানে হবে তাদের স্থানান্তর করতে প্রয়োজন ... এই প্রশ্নটি জিজ্ঞেস করলেন মাইক্রোসেকেন্ড বর্তমান সময় পেতে হবে।
বেসিল বাউরক

78

TL; ড

জাভা 9 এবং তার পরে: বর্তমান মুহুর্তটি ক্যাপচার করার সময় ন্যানোসেকেন্ডের রেজোলিউশন পর্যন্ত । দশমিক ভগ্নাংশের এটি 9 ডিজিট।

Instant.now()   

2017-12-23T12: 34: 56.123456789Z

মাইক্রোসেকেন্ডে সীমাবদ্ধ করতে , কেটে ফেলুন

Instant                // Represent a moment in UTC. 
.now()                 // Capture the current moment. Returns a `Instant` object. 
.truncatedTo(          // Lop off the finer part of this moment. 
    ChronoUnit.MICROS  // Granularity to which we are truncating. 
)                      // Returns another `Instant` object rather than changing the original, per the immutable objects pattern. 

2017-12-23T12: 34: 56.123456Z

অনুশীলনে, আপনি কেবলমাত্র মাইক্রোসেকেন্ডগুলি দেখতে পাবেন .nowযেহেতু সমসাময়িক প্রচলিত কম্পিউটার হার্ডওয়্যার ক্লকগুলি ন্যানোসেকেন্ডগুলিতে সঠিক নয় ।

বিস্তারিত

অন্যান্য উত্তরগুলি জাভা 8 হিসাবে কিছুটা পুরানো।

java.time

জাভা 8 এবং পরে জাভা.টাইম ফ্রেমওয়ার্ক সহ আসে । এই নতুন ক্লাসগুলি জাভা.ইটি.এল.ডেট /.ক্যালেন্ডার এবং জাভা.টেক্সট.সিম্পলডেট ফরমেটের মতো জাভার প্রাথমিক সংস্করণগুলির সাথে প্রেরণ করা ত্রুটিযুক্ত ঝামেলাযুক্ত তারিখের ক্লাসগুলিকে সহায়তা করে। ফ্রেমওয়ার্কটি জেএসআর 310 দ্বারা সংজ্ঞায়িত করা হয়েছে, জোডা-টাইম দ্বারা অনুপ্রাণিত , থ্রিটেন-এক্সট্রা প্রকল্প দ্বারা প্রসারিত।

জাভা.টাইমের ক্লাসগুলি ন্যানোসেকেন্ডগুলিতে সংশোধন করে , পুরানো তারিখের সময় ক্লাস এবং জোদা-টাইম উভয়ই ব্যবহৃত মিলিসেকেন্ডের চেয়ে অনেক বেশি সূক্ষ্ম । প্রশ্নটিতে জিজ্ঞাসা করা মাইক্রোসেকেন্ডগুলির চেয়ে সূক্ষ্ম ।

এখানে চিত্র বর্ণনা লিখুন

Clock বাস্তবায়ন

জাভা.টাইম ক্লাসগুলি ন্যানোসেকেন্ডগুলিতে মান প্রতিনিধিত্বকারী ডেটা সমর্থন করে, ক্লাসগুলি এখনও ন্যানোসেকেন্ডগুলিতে মান উত্পন্ন করে না । now()পদ্ধতি, পুরাতন তারিখ-সময় শ্রেণীর হিসাবে একই বয়সী ঘড়ি বাস্তবায়ন ব্যবহার System.currentTimeMillis()Clockজাভা.টাইমে আমাদের কাছে নতুন ইন্টারফেস রয়েছে তবে সেই ইন্টারফেসটির বাস্তবায়ন একই পুরানো মিলিসেকেন্ড ঘড়ি।

সুতরাং আপনি ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )ভগ্নাংশের দ্বিতীয়টির নয়টি অঙ্ক দেখতে ফলাফলের পাঠ্য উপস্থাপনাকে ফর্ম্যাট করতে পারেন তবে কেবল প্রথম তিনটি সংখ্যায় এই জাতীয় সংখ্যা থাকবে:

2017-12-23T12:34:56.789000000Z

জাভা 9 এ নতুন ক্লক

জাভা 9 এর ওপেনজেডিকে এবং ওরাকল বাস্তবায়নে Clockজাভা.টাইম ক্লাসগুলির সম্পূর্ণ ন্যানোসেকেন্ডের সক্ষমতা পর্যন্ত সূক্ষ্ম গ্রানুলারিটির সাথে একটি নতুন ডিফল্ট বাস্তবায়ন রয়েছে।

ওপেনজেডিকে সমস্যাটি দেখুন , জাভা.টাইম.ক্লক.সিসটমুটসি () প্রয়োগের যথার্থতা বাড়ান । সেই সমস্যাটি সফলভাবে প্রয়োগ করা হয়েছে।

2017-12-23T12:34:56.123456789Z

ম্যাকওএস সিয়েরার সাথে একটি ম্যাকবুক প্রোতে (রেটিনা, 15 ইঞ্চি, শেষ 2013) আমি মাইক্রোসেকেন্ডগুলিতে (দশমিক ভগ্নাংশের ছয় অঙ্ক পর্যন্ত) বর্তমান মুহুর্তটি পাই।

2017-12-23T12:34:56.123456Z

হার্ডওয়্যার ক্লক

মনে রাখবেন যে কোনও নতুন সূক্ষ্ম Clockবাস্তবায়নের পরেও আপনার ফলাফলগুলি কম্পিউটারের দ্বারা পৃথক হতে পারে। বর্তমান মুহূর্তটি জানার জন্য জাভা অন্তর্নিহিত কম্পিউটার হার্ডওয়্যারটির ঘড়ির উপর নির্ভর করে।

  • রেজল্যুশন হার্ডওয়্যার ঘড়ি ব্যাপকভাবে পরিবর্তিত হয়। উদাহরণস্বরূপ, যদি কোনও নির্দিষ্ট কম্পিউটারের হার্ডওয়্যার ক্লকটি কেবল মাইক্রোসেকেন্ডস গ্রানুলারিটি সমর্থন করে তবে যে কোনও উত্সর্গীকৃত তারিখ-সময়ের মানগুলির মধ্যে শেষের তিনটি সংখ্যাটি শূন্যের সাথে ভগ্নাংশ দ্বিতীয় হতে কেবল ছয় অঙ্ক থাকবে।
  • সঠিকতা হার্ডওয়্যার ঘড়ি ব্যাপকভাবে পরিবর্তিত হয়। যেহেতু একটি ঘড়িটি কয়েক সেকেন্ডের দশমিক ভগ্নাংশের কয়েকটি অঙ্ক সহ একটি মান উত্পন্ন করে, সেই অঙ্কগুলি সঠিক হতে পারে না, কেবলমাত্র পারমাণবিক ঘড়ি থেকে পড়ার মতো সময় থেকে অদলবদল হয় । অন্য কথায়, আপনি দশমিক চিহ্নের ডান দিকে কয়েকটি সংখ্যার অঙ্ক দেখতে পেয়েছেন এর অর্থ এই নয় যে আপনি এই মুহুর্তের ডিগ্রি থেকে সত্য হয়ে ওঠার মধ্যবর্তী সময়কে বিশ্বাস করতে পারেন।

তারা ন্যানোসেকেন্ডগুলিতে সমাধান করতে পারে তবে তারা এখনও সিস্টেম.কন্ট্রেনটাইমমিলিসের উপর ভিত্তি করে রয়েছে, তাই তারা শেষের দিকে কেবল 0 টি গুচ্ছ যোগ করে। আপনি যদি মাইক্রো / ন্যানো সেকেন্ডে সময় নেওয়ার চেষ্টা করছেন তবে কোনওভাবেই সহায়তা করে না, ব্যবহারকারী নিজে থেকে 0 মিলসেকেন্ড সময়টিতে 0 সেকেন্ড যুক্ত করতে পারে।
annedroiid

@ অানড্রয়েড আমি আমার উত্তরে এটি আবরণ করেছি। জাভা 8-এ আপনি ন্যানোসেকেন্ড রেজোলিউশনের সাথে মুহুর্তগুলি সংরক্ষণ করতে পারেন তবে বর্তমান মুহুর্তটি ধরা কেবলমাত্র মিলিসেকেন্ডে। একটি নতুন বাস্তবায়নের সাথে জাভা 9 এ প্রতিকার করেছেন Clock। তবুও, জাভা 8-এ জাভা.টাইম ক্লাসগুলি পোস্টগ্রিস ডাটাবেসে মাইক্রোসেকেন্ডের মতো অন্যান্য উত্স দ্বারা কৃত মানকে ধরে রাখতে সহায়ক। তবে মাইক্রোসেকেন্ড এবং ন্যানোসেকেন্ডস রেঞ্জের মানগুলির অপ্রতুলতা থেকে সাবধান থাকুন; সাধারণ কম্পিউটার হার্ডওয়্যারটি সঠিকভাবে কোনও হার্ডওয়্যার ক্লক ট্র্যাকিংয়ের সময়টি বহন করতে পারে না। ভগ্নাংশ দ্বিতীয়ের ছয় বা নয় অঙ্কের একটি মান সত্য হতে পারে না।
তুলসী বাউরক


@ রোল্যান্ড হ্যাঁ, এখন ঠিক আছে, ধন্যবাদ। এফওয়াইআই, স্ট্যাক ওভারফ্লোতে আপনাকে এ জাতীয় ত্রুটি সমাধানের জন্য সরাসরি উত্তর সম্পাদনা করার জন্য আমন্ত্রিত করা হয়।
তুলসী বাউর্কে

55

আপনি ব্যবহার করতে পারেন System.nanoTime():

long start = System.nanoTime();
// do stuff
long end = System.nanoTime();
long microseconds = (end - start) / 1000;

ন্যানোসেকেন্ডে সময় পেতে তবে এটি একটি কঠোরভাবে আপেক্ষিক পরিমাপ। এর কোন নিরঙ্কুশ অর্থ নেই। কিছু করতে কতক্ষণ সময় লেগেছে তা মাপতে এটি অন্যান্য ন্যানো সময়ের সাথে তুলনা করার জন্য কেবল দরকারী।


14

অন্যান্য পোস্টার ইতিমধ্যে ইঙ্গিত হিসাবে; আপনার সিস্টেমের ঘড়ি সম্ভবত মাইক্রোসেকেন্ডগুলিতে আসল বিশ্ব সময় পর্যন্ত সমলয় নয়। তা সত্ত্বেও মাইক্রোসেকেন্ড যথাযথ টাইমস্ট্যাম্পগুলি বর্তমান প্রাচীরের সময় নির্দেশক এবং জিনিসগুলির সময়কাল পরিমাপ / প্রোফাইলিং উভয়ের জন্য একটি সংকর হিসাবে কার্যকর useful

আমি "2012-10-21 19: 13: 45.267128" এর মতো টাইমস্ট্যাম্পগুলি ব্যবহার করে লগ ফাইলগুলিতে লিখিত সমস্ত ইভেন্ট / বার্তাগুলিকে লেবেল করি। এগুলি উভয়ই বোঝায় যখন এটি ঘটেছিল ("প্রাচীর" সময়), এবং লগ ফাইলটিতে এটি এবং পরবর্তী ইভেন্টের মধ্যে সময়কাল পরিমাপ করতেও ব্যবহৃত হতে পারে (মাইক্রোসেকেন্ডগুলিতে আপেক্ষিক পার্থক্য)।

এটি অর্জনের জন্য, আপনাকে সিস্টেম.কারানোটাইমমিলিস () কে সিস্টেম.নানোটাইম () এর সাথে সংযুক্ত করতে হবে এবং সেই মুহুর্ত থেকে सिस्टम.নানোটাইম () এর সাথে একচেটিয়াভাবে কাজ করতে হবে। উদাহরণ কোড:

/**
 * Class to generate timestamps with microsecond precision
 * For example: MicroTimestamp.INSTANCE.get() = "2012-10-21 19:13:45.267128"
 */ 
public enum MicroTimestamp 
{  INSTANCE ;

   private long              startDate ;
   private long              startNanoseconds ;
   private SimpleDateFormat  dateFormat ;

   private MicroTimestamp()
   {  this.startDate = System.currentTimeMillis() ;
      this.startNanoseconds = System.nanoTime() ;
      this.dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ;
   }

   public String get()
   {  long microSeconds = (System.nanoTime() - this.startNanoseconds) / 1000 ;
      long date = this.startDate + (microSeconds/1000) ;
      return this.dateFormat.format(date) + String.format("%03d", microSeconds % 1000) ;
   }
}

5
ধারণাটি ভাল, তবে আপনাকে অবশ্যই এখন থেকে পুনরায় সিঙ্ক্রোনাইজ করতে হবে। সিস্টেম টাইম (কারেন্টটাইম) এবং সিপিইউ ক্লক (ন্যানোটাইম) সিঙ্কে নেই, যেহেতু তারা প্রায়শই বিভিন্ন হার্ডওয়্যার ক্লকের উপর ভিত্তি করে থাকে। তদ্ব্যতীত, আপনার অপারেটিং সিস্টেমের টাইম সার্ভার যদি উপলভ্য থাকে তবে বাহ্যিক সময়ের উত্সের সাথে সিস্টেম ঘড়িটিকে পুনরায় সমন্বয় করে। অতএব, আপনার আপাতদৃষ্টিতে খুব সুনির্দিষ্ট শ্রেণি এমন সময় স্ট্যাম্পগুলি তৈরি করবে যা সম্ভবত বন্ধ হয়ে যেতে পারে!
এইচ

3
এই কোডটি থ্রেড নিরাপদ বলে মনে হচ্ছে না। দুটি যুগপত কল MicroTimestamp.INSTANCE.get()সমস্যাযুক্ত হতে পারে।
আহমেদ

@ আহমেদ আপনি কেন কোড থ্রেড নিরাপদ না বলে মনে করেন? get()পদ্ধতিতে সদস্য ভেরিয়েবলগুলি আপডেট করার মতো কিছুই নেই ; এটি কেবল অস্থায়ী স্থানীয় ভেরিয়েবল ব্যবহার করে।
জেসন স্মিথ

6

আপনি সম্ভবত এমন একটি উপাদান তৈরি করতে পারেন যা সিস্টেম.নানোটাইম () এবং সিস্টেম.কমারেন্টটাইমমিলিস () এর মধ্যে অফসেট নির্ধারণ করে এবং মহাকাশকাল থেকে কার্যকরভাবে ন্যানোসেকেন্ডগুলি পেতে পারে।

public class TimerImpl implements Timer {

    private final long offset;

    private static long calculateOffset() {
        final long nano = System.nanoTime();
        final long nanoFromMilli = System.currentTimeMillis() * 1_000_000;
        return nanoFromMilli - nano;
    }

    public TimerImpl() {
        final int count = 500;
        BigDecimal offsetSum = BigDecimal.ZERO;
        for (int i = 0; i < count; i++) {
            offsetSum = offsetSum.add(BigDecimal.valueOf(calculateOffset()));
        }
        offset = (offsetSum.divide(BigDecimal.valueOf(count))).longValue();
    }

    public long nowNano() {
        return offset + System.nanoTime();
    }

    public long nowMicro() {
        return (offset + System.nanoTime()) / 1000;
    }

    public long nowMilli() {
        return System.currentTimeMillis();
    }
}

নিম্নলিখিত পরীক্ষাটি আমার মেশিনে মোটামুটি ভাল ফলাফল দেয় produces

    final Timer timer = new TimerImpl();
    while (true) {
        System.out.println(timer.nowNano());
        System.out.println(timer.nowMilli());
    }

পার্থক্যটি + -3ms এর পরিসরে দোলায়মান বলে মনে হচ্ছে। আমি অনুমান করি যে কেউ একটি অফসেট হিসাবটি আরও কিছুটা টুইঙ্ক করতে পারে।

1495065607202174413
1495065607203
1495065607202177574
1495065607203
...
1495065607372205730
1495065607370
1495065607372208890
1495065607370
...

2

আপনি যদি লিনাক্স সম্পর্কে আগ্রহী হন: আপনি যদি "কারেন্টটাইমমিলিস ()" এর উত্স কোডটি খুঁজে বের করেন তবে আপনি দেখতে পাবেন যে লিনাক্সে, আপনি যদি এই পদ্ধতিটিকে কল করেন তবে এটি একটি মাইক্রোসেকেন্ড সময় ফিরে পাবে। তবে জাভা তখন মাইক্রোসেকেন্ডগুলিকে ছাঁটাই করে আপনাকে মিলিসেকেন্ডে ফিরিয়ে দেয়। এটি আংশিক কারণ জাভা ক্রস প্ল্যাটফর্ম হতে হয়েছিল তাই লিনাক্সের জন্য বিশেষত পদ্ধতিগুলি সরবরাহ করাই ছিল একদিন পিছনে ফিরে আসা (মনে রাখবেন যে ক্রুডি নরম লিঙ্ক সমর্থনটি 1.6 এর পিছনে?!)। এটি কারণও, আপনি যখন ঘড়িটি আপনাকে লিনাক্সে মাইক্রোসেকেন্ডগুলি ফিরিয়ে দিতে পারে, তার অর্থ এই নয় যে সময়টি পরীক্ষা করার পক্ষে এটি ভাল। মাইক্রোসেকেন্ড স্তরে, আপনার জানতে হবে যে এনটিপি আপনার সময়টিকে পুনরায় রূপায়ণ করছে না এবং পদ্ধতি কল করার সময় আপনার ঘড়ি খুব বেশি প্রবাহিত হয়নি।

এর অর্থ, তাত্ত্বিকভাবে, লিনাক্সে, আপনি একটি জেএনআই মোড়ক লিখতে পারেন যা সিস্টেম প্যাকেজের মতো, তবে মাইক্রোসেকেন্ডগুলি কেটে ফেলতে পারে না।


2

একটি "দ্রুত এবং নোংরা" সমাধান যা আমি শেষ পর্যন্ত দিয়েছিলাম:

TimeUnit.NANOSECONDS.toMicros(System.nanoTime());

হালনাগাদ:

আমি প্রথমে System.nanoTime এর সাথে গিয়েছিলাম কিন্তু তখন আমি জানতে পারি এটি কেবল অতিবাহিত সময়ের জন্য ব্যবহার করা উচিত, অবশেষে আমি আমার কোডটি মিলি সেকেন্ডের সাথে কাজ করতে বা কিছু জায়গায় ব্যবহার করার জন্য পরিবর্তন করেছি:

TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis());

তবে এটি মানটির শেষে জিরো যুক্ত করবে (মাইক্রো = মিলিস * 1000)

ন্যানোটাইম সম্পর্কে কেউ যদি ভাবতে থাকে তবে এই উত্তরটি এখানে একটি "সতর্কতা চিহ্ন" হিসাবে রেখে দিন :)


1
ডক স্পষ্টভাবে বলল না ব্যবহার System.nanoTimeদেওয়াল-ঘড়ি সময় জন্য: "এই পদ্ধতি শুধুমাত্র অতিবাহিত সময় পরিমাপ ব্যবহার করা যেতে পারে এবং সিস্টেম বা প্রাচীর-ঘড়ির সময় অন্য কোন ধারণা এর সাথে সম্পর্কিত নয়।"
বাসিল বাউর্ক

1
@ বাসিলবার্ক আপনি সঠিক, এটি লেখার পরে অবশেষে আমার কোডটি সন্ধান করে এবং পরিবর্তন করেছি তবে এখানে আপডেট করতে ভুলে গেছি, মন্তব্যের জন্য ধন্যবাদ!
কিসর

2

জাভা এনামের মাধ্যমে মাইক্রোসেকেন্ডগুলিকে সমর্থন করে TimeUnit

এখানে জাভা ডক: এনাম টাইম ইউনিট

আপনি জাভাতে এইভাবে মাইক্রোসেকেন্ডগুলি পেতে পারেন:

long microsenconds = TimeUnit.MILLISECONDS.toMicros(System.currentTimeMillis());

আপনি মাইক্রোসেকেন্ডগুলিকে অন্য সময় ইউনিটে রূপান্তর করতে পারেন, উদাহরণস্বরূপ:

long seconds = TimeUnit.MICROSECONDS.toSeconds(microsenconds);

এটি সঠিক নয়, আপনি মাইক্রো রেজোলিউশন / দৈর্ঘ্যে সময় পাবেন তবে সময় নিজেই কেবল মিলির যথাযথতার সাথে থাকবে (যার অর্থ শেষ তিনটি সংখ্যা সর্বদা 0 হবে)।
মাইকেলসএক্স

0

আপনি যদি রিয়েলটাইম সিস্টেমের জন্য এটি ব্যবহার করতে চান, সম্ভবত জাভা টাইমস্ট্যাম্প পাওয়ার জন্য সেরা পছন্দ নয়। আপনি যদি অনন্য কীটির জন্য ব্যবহার করতে চলেছেন তবে জেসন স্মিথের উত্তর যথেষ্ট করবে। তবে কেবলমাত্র যদি 2 আইটেমটি একই টাইমস্ট্যাম্পটি সমাপ্ত হয় (তবে এটি 2 টি একই সাথে প্রক্রিয়াজাত করা সম্ভব হলে) প্রত্যাশা করতে আপনি শেষ টাইমস্ট্যাম্পটি বর্তমান টাইমস্ট্যাম্পের সমান না হওয়া পর্যন্ত লুপ করতে পারেন।

String timestamp = new String();
do {
    timestamp = String.valueOf(MicroTimestamp.INSTANCE.get());
    item.setTimestamp(timestamp);
} while(lasttimestamp.equals(timestamp));
lasttimestamp = item.getTimestamp();

0

মহাকাশ থেকে মাইক্রোসেকেন্ডগুলি গণনা করতে তাত্ক্ষণিক ব্যবহার করুন:

val instant = Instant.now();
val currentTimeMicros = instant.getEpochSecond() * 1000_000 + instant.getNano() / 1000;


-3

একটি স্বাক্ষরবিহীন দীর্ঘ টাইমস্ট্যাম্প কীভাবে তৈরি করবেন তার উদাহরণ এখানে:

UnsignedLong current = new UnsignedLong(new Timestamp(new Date().getTime()).getTime());

2
ভুল উত্তর. Java.util.Date বর্গের মিলিসেকেন্ডগুলির রেজোলিউশন রয়েছে, মাইক্রোসেকেন্ডগুলি প্রশ্নের ক্ষেত্রে নির্দিষ্ট নয়। Java.sql.Timestamp তৈরি করা বায়ু থেকে অতিরিক্ত ডেটা টানবে না।
বাসিল বাউর্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.