বর্তমানের মধ্যরাত থেকে আমি কীভাবে মিলিসেকেন্ডের গণনা পেতে পারি?


124

দ্রষ্টব্য, আমি যুগ থেকে মিলিস চাই না। আমি বর্তমানে ঘড়িতে মিলি সেকেন্ডের সংখ্যাটি চাই।

সুতরাং উদাহরণস্বরূপ, আমি কোড এই বিট আছে।

Date date2 = new Date(); 
Long time2 = (long) (((((date2.getHours() * 60) + date2.getMinutes())* 60 ) + date2.getSeconds()) * 1000);

তারিখ সহ মিলিসেকেন্ড পাওয়ার কোনও উপায় আছে কি? এই কাজ করার জন্য অন্য উপায় আছে কি?

দ্রষ্টব্য: System.currentTimeMillis() আমাকে যুগ থেকে মিলিস দেয় যা আমি যা খুঁজছি তা নয়।


2
আপনার অর্থ, "দ্বিতীয়টিতে মিলিসেকেন্ডস", তাই মানটি সবসময় অন্তরেই থাকে [0, 999], তাই না ? @ থিংসস্টিপ শেষ বাক্যটি পড়ুন।
ম্যাট বল

@ লেমনিও উদাহরণ দিলে আপনার প্রশ্ন আরও পরিষ্কার হয়ে যাবে।
তুলসী বাউরক

এফওয়াইআই, জাভা.টাইম ক্লাসগুলির দ্বারা দমনকৃত পুরানো ডেট-টাইম ক্লাসগুলি যেমন java.util.Dateএখন লিগ্যাসি
বেসিল Bourque

এফওয়াইআই, জাভা.টাইম ক্লাসগুলির দ্বারা দমনকৃত পুরানো ডেট-টাইম ক্লাসগুলি যেমন java.util.Dateএখন লিগ্যাসিওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
বেসিল Bourque

1
@ChrisNeve JEP 150 দ্বারা অনুমোদিত ব্রায়ান Goetz , JSR 310 সর্বসম্মতিক্রমে গৃহীত , একটি প্রযুক্তিগত নিবন্ধটি নতুন ওরাকল দ্বারা প্রকাশিত, এবং পুরানো তারিখ-সময় ওরাকল টিউটোরিয়ালের প্রতিস্থাপন java.time টিউটোরিয়াল
বেসিল বোর্কে

উত্তর:


197

তুমি বোঝাতে চাচ্ছ?

long millis = System.currentTimeMillis() % 1000;

বিটিডাব্লু উইন্ডোজ 1969 সালে টাইমট্রোলের অনুমতি দেয় না

C:\> date
Enter the new date: (dd-mm-yy) 2/8/1969
The system cannot accept the date entered.

8
নোট করুন যে আপনি যদি ইউনিক্সের মহাকালের আগে সময়ে সময়ে ভ্রমণ করেন তবে এটি ব্যবহার করার সময় একটি নেতিবাচক মান দেবে c.get(Calendar.MILLISECOND)। সর্বদা কর্নার কেস গুলো ভাবুন!
জন স্কিটে 2'12

এবং যদি কেউ দ্বিতীয় সীমান্তে না সময় নির্ধারণ করে বা এই বিরতিতে লিপ-মিলিসেকেন্ড যোগ করে = =))
মার্কাস মিককোলাইনেন

35
জাভা সময় ভ্রমণের পক্ষে সমর্থন করে না।
আর মার্টিনহো ফার্নান্দেস

1
@ মার্কস মিক্কোলাইনেন: না, System.currentTimeMillis()সময় অঞ্চল দ্বারা প্রভাবিত হয় না।
জন স্কিটি

1
@ পিটারল্যাওরে: ঠিক আছে, এটি হতে পারে বা নাও পারে। এটি বাস্তবায়নের উপর নির্ভর করে। তারিখের জন্য ডকগুলি থেকে: "দ্বিতীয়টি 0 থেকে 61 এর মধ্যে পূর্ণসংখ্যার দ্বারা প্রতিনিধিত্ব করা হয়; 60 এবং 61 এর মানগুলি কেবল লিপ সেকেন্ডের জন্য এবং তারপরে কেবল জাভা বাস্তবায়নে ঘটে যা আসলে লিপ সেকেন্ড সঠিকভাবে ট্র্যাক করে track সেকেন্ডে বর্তমানে প্রবর্তন করা হয়েছে, একই মুহূর্তে দুটি লিপ সেকেন্ড ঘটে যাওয়ার পক্ষে অত্যন্ত সম্ভাবনা নেই, তবে এই স্পেসিফিকেশনটি আইএসও সি-এর জন্য তারিখ এবং সময় সম্মেলনের অনুসরণ করে। "
জন স্কিটে

24

ক্যালেন্ডার ব্যবহার করুন

Calendar.getInstance().get(Calendar.MILLISECOND);

অথবা

Calendar c=Calendar.getInstance();
c.setTime(new Date()); /* whatever*/
//c.setTimeZone(...); if necessary
c.get(Calendar.MILLISECOND);

অনুশীলনে যদিও আমি মনে করি এটি প্রায় সবসময় সিস্টেমের সমান হবে .c বর্তমানের টাইমমিলিস ()% 1000; কারও কাছে লিপ-মিলিসেকেন্ড না থাকলে বা কোনও ক্যালেন্ডার দ্বিতীয়-বাউন্ডারে নয় একটি যুগের সাথে সংজ্ঞায়িত হয়।


ক্যালেন্ডারটি ইতিমধ্যে ডিফল্ট হিসাবে বর্তমান সময়, এবং মিলিসেকেন্ডে কোনও নেই।
kgautron


13

TL; ড

আপনি মিলিসেকেন্ড একটি সংখ্যা হিসাবে বর্তমান সময় এক সেকেন্ডের ভগ্নাংশ জন্য অনুরোধ ( না যুগান্তকারী থেকে গণনা)।

Instant.now()                               // Get current moment in UTC, then…
       .get( ChronoField.MILLI_OF_SECOND )  // interrogate a `TemporalField`.

2017-04-25T03: 01: 14.113Z → 113

  1. ন্যানোসেকেন্ডে (বিলিয়ন) মধ্যে দ্বিতীয় ভগ্নাংশ পান।
  2. মিলিসেকেন্ডে হাজার হাজার কেটে হাজারে ভাগ করুন (হাজার)

IdeOne.com এ এই কোডটি সরাসরি চালিত দেখুন ।

জাভা.টাইম ব্যবহার

আধুনিক উপায়টি জাভা.টাইম ক্লাসগুলির সাথে।

ইউটিসিতে বর্তমান মুহুর্তটি ক্যাপচার করুন।

Instant.now()

Instant.getক এর মান জিজ্ঞাসাবাদ করতে পদ্ধতিটি ব্যবহার করুন TemporalField। আমাদের ক্ষেত্রে, TemporalFieldআমরা চাই ChronoField.MILLI_OF_SECOND

int millis = Instant.now().get( ChronoField.MILLI_OF_SECOND ) ;  // Get current moment in UTC, then interrogate a `TemporalField`.

অথবা নিজেই গণিত করুন।

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

ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) ;

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

long nanosFractionOfSecond = zdt.getNano();

আপনি যদি সত্যিই মিলিসেকেন্ডগুলি চান তবে দশ মিলিয়ন দিয়ে ভাগ করে সূক্ষ্ম তথ্যটি কেটে ফেলুন। উদাহরণস্বরূপ, একটি অর্ধেক সেকেন্ডটি 500,000,000 ন্যানোসেকেন্ড এবং 500 মিলিসেকেন্ডও।

long millis = ( nanosFractionOfSecond / 1_000_000L ) ;  // Truncate nanoseconds to milliseconds, by a factor of one million.

জাভা.টাইম সম্পর্কে

Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.DateCalendarSimpleDateFormat

Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।

আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310

জাভা.টাইম ক্লাস কোথায় পাবেন?

ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval, YearWeek, YearQuarter, এবং আরো


12

আমি উপরের কয়েকটি চেষ্টা করেছি তবে তারা 1000 টি রিসেট করছে বলে মনে হচ্ছে

এটি অবশ্যই কার্যকরভাবে কাজ করে এবং বছরটিও বিবেচনায় নেওয়া উচিত

long millisStart = Calendar.getInstance().getTimeInMillis();

এবং তারপরে যদি প্রয়োজন হয় তবে শেষ সময়ের জন্য একই করুন।


1
ভুল প্রশ্নের উত্তর দেওয়া। এটি যুগের বর্তমান মিলিস, বর্তমান সময়ের মিলিস অংশ নয়।
শান ভ্যান গর্ডার

4
  1. long timeNow = System.currentTimeMillis();
  2. System.out.println(new Date(timeNow));

শুক্র এপ্রিল 04 14:27:05 পিডিটি 2014


2

Joda-টাইম

আমি মনে করি আপনি এটি করতে জোদা-সময় ব্যবহার করতে পারেন । কটাক্ষপাত DateTimeশ্রেণী ও এর getMillisOfSecondপদ্ধতি। কিছুটা এইরকম

int ms = new DateTime().getMillisOfSecond() ;

সংকলন ত্রুটি: " getMillis()অ্যাক্সেস সুরক্ষিত করেছে"; get()পরিবর্তে ব্যবহার করা প্রয়োজন । এছাড়াও নোট করুন যে new DateTime(new Date())সহজভাবে লেখার সমতুল্য new DateTime()
জোনিক

পদ্ধতিটি millisOfSecondকোনও অবজেক্টে অ্যাক্সেস করে এবং সেই বস্তু থেকে getআদিম আহরণের জন্য পরবর্তী কল int। আপনি সুবিধার্থে প্রাপ্ত পদ্ধতিটি ব্যবহার করে দুটি কল ভেঙে ফেলতে পারেন getMillisOfSecond। জোডা-টাইম তার বেশ কয়েকটি বৈশিষ্ট্যের জন্য এই প্যাটার্নটি অনুসরণ করে।
তুলসী বাউরক

1
এফওয়াইআই, জোদা-টাইম প্রকল্পটি এখন রক্ষণাবেক্ষণের মোডে রয়েছে , দলটি জাভা.টাইম ক্লাসগুলিতে মাইগ্রেশনের পরামর্শ দিচ্ছে
বাসিল বাউর্ক

0

জাভা 8 এ আপনি সহজভাবে করতে পারেন

ZonedDateTime.now().toInstant().toEpochMilli()

ফিরে আসে: 1970-01-01T00: 00: 00Z এর পর্বের পর থেকে মিলিসেকেন্ডের সংখ্যা


1
[এ] প্রশ্নটি যা চেয়েছিল এটি নয় । স্পষ্টতই বলেছেন যে তারা যুগের রেফারেন্স তারিখ থেকে মিলিসেকেন্ডের একটি গণনা চান না । [বি] আপনি জোনেডডেটটাইমটি ফেলে দিয়ে ছোট করে দিতে পারেন:Instant.now().toEpochMilli()
বাসিল

0

আমি জাভা 8 ব্যবহার করে পরীক্ষাটি করেছি এটি নির্ধারণ করে না যে নির্মাতা সর্বদা 0 মিলিসেকেন্ড এবং একটি 1000 কনটেন্টেশন এর পুনরাবৃত্তির 26 এবং 33 মিলি সেকেন্ডের মধ্যে কনট্যাট গ্রহণ করে

আশা করি এটি আপনার আদর্শের সাথে চেষ্টা করে দেখতে সহায়তা করে

public void count() {

        String result = "";

        StringBuilder builder = new StringBuilder();

        long millis1 = System.currentTimeMillis(),
            millis2;

        for (int i = 0; i < 1000; i++) {
            builder.append("hello world this is the concat vs builder test enjoy");
        }

        millis2 = System.currentTimeMillis();

        System.out.println("Diff: " + (millis2 - millis1));

        millis1 = System.currentTimeMillis();

        for (int i = 0; i < 1000; i++) {
            result += "hello world this is the concat vs builder test enjoy";
        }

        millis2 = System.currentTimeMillis();

        System.out.println("Diff: " + (millis2 - millis1));
    }

0

জাভা 8:

LocalDateTime toDate = LocalDateTime.now();
LocalDateTime fromDate = LocalDateTime.of(toDate.getYear(), toDate.getMonth(), 
toDate.getDayOfMonth(), 0, 0, 0);
long millis = ChronoUnit.MILLIS.between(fromDate, toDate);

1
কিছু সময় অঞ্চলে কাজ করে না। কিছু জোনে, কিছু তারিখে, দিনটি শুরু হতে পারে 00:00:00 এ। এবং দিনটি 24 ঘন্টা দীর্ঘ নাও হতে পারে, কয়েক ঘন্টা বা কয়েক মিনিট যোগ করতে বা এড়িয়ে যেতে পারে। LocalDateTimeবর্গ একটি মুহূর্ত উপস্থাপন করতে পারেন না, সময় অঞ্চল কোন ধারণা উদাসীন বা অফসেট-থেকে-ইউটিসি, আর সেইজন্যই তিনি এইসব সময় অঞ্চল বিষয় ট্র্যাক করতে পারবে না।
বাসিল বার্ক

0

মিলি সেকেন্ডে সময় পেতে আপনি java.util.C ক্যালেন্ডার ক্লাস ব্যবহার করতে পারেন। উদাহরণ:

Calendar cal = Calendar.getInstance();
int milliSec = cal.get(Calendar.MILLISECOND);
// print milliSec

java.util.Date date = cal.getTime();
System.out.println("Output: " +  new SimpleDateFormat("yyyy/MM/dd-HH:mm:ss:SSS").format(date));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.