वर्तमान तिथि और समय कैसे प्राप्त करें


342

मुझे जावा में वर्तमान दिनांक और समय कैसे मिलेगा?

मैं कुछ ऐसी चीज़ की तलाश में हूं जो DateTime.NowC # से बराबर हो ।


इस प्रश्न से अधिक पुराना है इस सवाल पूर्व में डुप्लिकेट के रूप में चिह्नित। इसलिए मैंने पदनाम को उलट दिया, इस प्रश्न को फिर से खोल दिया और नए को डुप्लिकेट के रूप में चिह्नित किया।
बेसिल बॉर्क

जवाबों:


414

Dateबिना किसी तर्क के बस एक नई वस्तु का निर्माण करें ; यह नई वस्तु के लिए वर्तमान दिनांक और समय निर्दिष्ट करेगा।

import java.util.Date;

Date d = new Date();

शून्य-तर्क निर्माता के लिए Javadocs के शब्दों में :

दिनांक ऑब्जेक्ट आवंटित करता है और इसे प्रारंभ करता है ताकि यह उस समय का प्रतिनिधित्व करता है जिस पर इसे आवंटित किया गया था , निकटतम मिलीसेकंड के लिए मापा गया था

सुनिश्चित करें कि आप उपयोग कर रहे हैं java.util.Dateऔर नहीं java.sql.Date- उत्तरार्द्ध में शून्य-आर्ग निर्माता नहीं है, और कुछ अलग शब्दार्थ हैं जो पूरी तरह से अलग बातचीत का विषय हैं। :)


13
यह भी ध्यान दें कि ग्रेगोरियन कैलंडर और इसी तरह की कई वस्तुएं उसी तरह काम करती हैं। तो आप जिस भी प्रकार की तारीख / कैलेंडर वस्तु के साथ काम कर रहे हैं, शून्य-तर्क निर्माता आमतौर पर वस्तु को वर्तमान तिथि / समय से आरंभ करता है।
पीटर डि सेको

दिनांक तिथि से: JDK 1.1 के रूप में, कैलेंडर वर्ग का उपयोग दिनांक और समय क्षेत्रों के बीच परिवर्तित करने के लिए किया जाना चाहिए और DateFormat वर्ग का उपयोग तिथि तार को स्वरूपित करने और पार्स करने के लिए किया जाना चाहिए।
पाओलो एम

9
कृपया नए Java8 API पर विचार करें - LocalDateTime.now () और ZonedDateTime.now ()
ओलेग

59

जावा तिथि और कैलेंडर कक्षाओं को कई लोगों द्वारा खराब तरीके से डिजाइन किए जाने पर विचार किया जाता है। आपको जोडा टाइम पर एक नज़र डालनी चाहिए , जो आमतौर पर जावा की अंतर्निहित तिथि पुस्तकालयों के बदले में उपयोग की जाने वाली लाइब्रेरी है।

DateTime.Nowजोडा टाइम के बराबर है:

DateTime dt = new DateTime();

अपडेट करें

जैसा कि टिप्पणियों में कहा गया है, जोडा टाइम के नवीनतम संस्करणों में एक DateTime.now()विधि है, इसलिए:

DateTime dt = DateTime.now();

4
Joda के वर्तमान (2.1) संस्करण में एक स्थिर DateTime.now विधि () (वैकल्पिक रूप से DateTimeZone या कालक्रम) को स्वीकार किया गया है। joda-time.sourceforge.net/apidocs/org/joda/time/…
रोमन ए। टेचर

1
ध्यान दें कि यह उत्तर 2010 में पोस्ट किया गया था। जावा 8 ने Joda Time की कई सर्वश्रेष्ठ विशेषताओं को अवशोषित किया है। देखें आधिकारिक दस्तावेज और अधिक जानकारी के लिए कई अन्य ऑनलाइन लेख।
डेविड्स

36

tl; डॉ

Instant.now()

java.time

जावा 8 और बाद में java.util.Date क्लास को नए java.time पैकेज ( ट्यूटोरियल ) द्वारा आगे बढ़ाया गया है। पुराने java.util.Date/.Calendar क्लासेस कुख्यात परेशान करने वाली, भ्रमित करने वाली और त्रुटिपूर्ण हैं। इनसे बचें।

ZonedDateTime

Java.time में वर्तमान क्षण प्राप्त करें।

ZonedDateTime now = ZonedDateTime.now();

एक ZonedDateTimeइनकैप्सुलेट्स:

  • तारीख।
  • दिन का समय, नैनोसेकंड रिज़ॉल्यूशन के सेकंड के एक अंश के साथ ।
  • समय क्षेत्र।

यदि कोई समय क्षेत्र निर्दिष्ट नहीं है, तो आपके JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र को चुपचाप सौंपा गया है। डिफ़ॉल्ट पर अंतर्निहित भरोसा करने की तुलना में अपने वांछित / अपेक्षित समय क्षेत्र को निर्दिष्ट करने के लिए बेहतर है।

ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );

यु.टी. सी

आमतौर पर यूटीसी समय क्षेत्र में अपने बैक-एंड काम (बिजनेस लॉजिक, डेटाबेस, स्टोरेज, डेटा एक्सचेंज) करने की आदत डालने के लिए बेहतर है । उपरोक्त कोड JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र पर निर्भर करता है।

Instantवर्ग नैनोसेकंड के एक संकल्प के साथ UTC में समय रेखा में एक पल के प्रतिनिधित्व करता है।

Instant instant = Instant.now();

Instantवर्ग java.time में एक बुनियादी इमारत ब्लॉक वर्ग है और अपने कोड में अक्सर इस्तेमाल किया जा सकता है।

जब आपको स्वरूपण में अधिक लचीलेपन की आवश्यकता होती है, तो एक में रूपांतरित करें OffsetDateTime। कोई ZoneOffsetवस्तु निर्दिष्ट करें । यूटीसी के लिए यूटीसी के लिए आसान स्थिरांक का उपयोग करें ।

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

समय क्षेत्र

आप उपयोगकर्ता को प्रस्तुति के लिए आसानी से किसी अन्य समय क्षेत्र में समायोजित कर सकते हैं। एक उचित समय क्षेत्र नाम का उपयोग करें , कभी भी 3-4 अक्षर कोड जैसे ESTया IST

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );

उस दिनांक-समय मान का स्ट्रिंग प्रतिनिधित्व उत्पन्न करें, स्थानीयकृत।

String output = DateTimeFormatter
    .ofLocalizedDate( FormatStyle.FULL )
    .withLocale( Locale.CANADA_FRENCH )
    .format ( nowMontreal );

Instant

या, यूटीसी में रहने के लिए, उपयोग करें Instant। एक Instantवस्तु समय रेखा पर एक क्षण का प्रतिनिधित्व करती है, नैनोसेकंड संकल्प के लिए, हमेशा यूटीसी में। यह ज़ोन की तारीख-समय के लिए बिल्डिंग ब्लॉक प्रदान करता है, साथ ही टाइम ज़ोन असाइनमेंट भी। आप इसे इस तरह से वैचारिक रूप से सोच सकते हैं:

ZonedDateTime= Instant+ZoneId

आप Instantए से अर्क निकाल सकते हैं ZonedDateTime

Instant instantNow = zdt.toInstant();

आप एक पल के साथ शुरू कर सकते हैं। यहां समय क्षेत्र निर्दिष्ट करने की आवश्यकता नहीं है, जैसा Instantकि हमेशा यूटीसी में होता है।

Instant now = Instant.now();

मैंने डुप्लिकेट प्रश्न पर अधिक विवरण के साथ एक और उत्तर भी पोस्ट किया ।
बेसिल बॉर्क

16

मैं कैलेंडर ऑब्जेक्ट का उपयोग करना पसंद करता हूं।

Calendar now = GregorianCalendar.getInstance()

मुझे इसके साथ काम करना बहुत आसान लगता है। आप कैलेंडर से दिनांक ऑब्जेक्ट भी प्राप्त कर सकते हैं।

http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html


4
या यह बस हो सकता हैCalendar.getInstance()
आकर्षित करें



10

java.lang.System.currentTimeMillis(); युग के बाद से डेटाइम वापस आ जाएगी


लॉगिंग के लिए अच्छा है, लेकिन उपयोगकर्ता को प्रदर्शित करने के लिए पार्सिंग और रूपांतरण की आवश्यकता है
ऋषि दुआ


5

यदि आप एक नई दिनांक ऑब्जेक्ट बनाते हैं, तो डिफ़ॉल्ट रूप से इसे वर्तमान समय पर सेट किया जाएगा:

import java.util.Date;
Date now = new Date();

3

जावा को हमेशा तारीख और समय उपयोग के मामलों के लिए अपर्याप्त समर्थन मिला है। उदाहरण के लिए, मौजूदा वर्ग (जैसे कि java.util.Dateऔर SimpleDateFormatter) थ्रेड-सुरक्षित नहीं हैं जो समवर्ती मुद्दों को जन्म दे सकता है। इसके अलावा एपीआई में कुछ खामियां हैं। उदाहरण के लिए, java.util.Date1900 में शुरू होने वाले साल , महीने 1 से शुरू होते हैं, और दिन 0 से शुरू होते हैं — बहुत सहज नहीं। इन मुद्दों ने तीसरे पक्ष की तारीख और समय पुस्तकालयों की लोकप्रियता को बढ़ावा दिया, जैसे कि Joda-Time। एक नई तारीख और समय को संबोधित करने के लिए एपीआई को जावा एसई 8 के लिए डिज़ाइन किया गया है।

LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);

डॉक्टर के अनुसार :

पद्धति now()सिस्टम दिनांक और डिफ़ॉल्ट समय-क्षेत्र का उपयोग करके वर्तमान दिनांक-समय लौटाती है, शून्य नहीं । यह डिफ़ॉल्ट समय-क्षेत्र में सिस्टम घड़ी से वर्तमान दिनांक-समय प्राप्त करता है। यह वर्तमान तिथि-समय प्राप्त करने के लिए डिफ़ॉल्ट समय-क्षेत्र में सिस्टम घड़ी को क्वेरी करेगा। इस पद्धति का उपयोग करने से परीक्षण के लिए एक वैकल्पिक घड़ी का उपयोग करने की क्षमता को रोका जा सकेगा क्योंकि घड़ी हार्ड-कोडेड है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.