जावा में वर्तमान क्षण के वर्ष, महीने, दिन, घंटे, मिनट, सेकंड और मिलीसेकंड कैसे प्राप्त करें?


104

मैं जावा में वर्तमान क्षण का वर्ष, महीना, दिन, घंटे, मिनट, सेकंड और मिलीसेकंड कैसे प्राप्त कर सकता हूं? मैं उन्हें पसंद करना चाहूंगा Strings

जवाबों:


254

आप इसके लिए गेटर्स का उपयोग कर सकते हैं java.time.LocalDateTime

LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
int millis = now.get(ChronoField.MILLI_OF_SECOND); // Note: no direct getter available.

System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);

या, जब आप अभी जावा 8 पर नहीं हैं, तो इसका उपयोग करें java.util.Calendar

Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH) + 1; // Note: zero based!
int day = now.get(Calendar.DAY_OF_MONTH);
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
int millis = now.get(Calendar.MILLISECOND);

System.out.printf("%d-%02d-%02d %02d:%02d:%02d.%03d", year, month, day, hour, minute, second, millis);

किसी भी तरह से, यह प्रिंट अब के रूप में:

2010-04-16 15: 15: 17.816

में कनवर्ट करने के intलिए String, का उपयोग करें String#valueOf()


यदि आपकी मंशा सभी को मानव अनुकूल स्ट्रिंग प्रारूप में व्यवस्थित करने और प्रदर्शित करने के बाद है, तो बेहतर है कि जावा 8 का उपयोग करें java.time.format.DateTimeFormatter( यहां ट्यूटोरियल )

LocalDateTime now = LocalDateTime.now();
String format1 = now.format(DateTimeFormatter.ISO_DATE_TIME);
String format2 = now.atZone(ZoneId.of("GMT")).format(DateTimeFormatter.RFC_1123_DATE_TIME);
String format3 = now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss", Locale.ENGLISH));

System.out.println(format1);
System.out.println(format2);
System.out.println(format3);

या जब आप जावा 8 पर अभी तक नहीं हैं, तो उपयोग करें java.text.SimpleDateFormat:

Date now = new Date(); // java.util.Date, NOT java.sql.Date or java.sql.Timestamp!
String format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(now);
String format2 = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH).format(now);
String format3 = new SimpleDateFormat("yyyyMMddHHmmss", Locale.ENGLISH).format(now);

System.out.println(format1);
System.out.println(format2);
System.out.println(format3);

किसी भी तरह से, यह पैदावार:

2010-04-16T15: 15: 17.816
शुक्र, 16 अप्रैल 2010 15:15:17 GMT
20100416151517

यह सभी देखें:


यदि आप प्रिंटफ का उपयोग करने जा रहे हैं, तो आप केवल मध्यस्थ कदम यानी "% 1 $ tm% 1 $ te,% 1 $ tY", c (java.util देखें) का उपयोग करने के बजाय दिनांक / समय के लिए प्रारूपों का उपयोग कर सकते हैं। पूर्ण सिंटैक्स के लिए सूत्र)
एम। जेसप

1
@म। जेसप: यह वास्तव में अच्छा है। हालाँकि मैंने कभी इसका उपयोग नहीं किया है, इसलिए मैं इसे सिर के ऊपर से प्रवेश नहीं कर सका, ऊपर सिर्फ डेमो उद्देश्यों के लिए है। भले ही, मैं नहीं बल्कि हड़पने होगा SimpleDateFormatया DateTimeFormatterकि विशेष कार्य :) के लिए
BalusC

मैं दृढ़ता से जोडा-टाइम का उपयोग करने का सुझाव दूंगा, क्योंकि इसके बहुत अच्छे और समझ में आने वाले एपीआई की तुलना में बुरी तरह से तैयार की गई तिथियां और कैलेंडर जो जावा सीधे प्रदान करता है।
काइत्सु

मैं इसे पसंद करता हूं, विशेष रूप से i18n में स्टार्टटाइम या एंडटाइम पाने के लिए काम करता हूं:new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).format(new Date());
एड़ी

1
जावा-टाइम कार्यक्षमता का अधिकांश भाग थ्रीटेन-बैकपोर्ट परियोजना में जावा 6 और 7 में वापस पोर्ट किया गया है ।
तुलसी बॉर्क

30

Joda-time पर स्विच करें और आप इसे तीन लाइनों में कर सकते हैं

DateTime jodaTime = new DateTime();

DateTimeFormatter formatter = DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS");
System.out.println("jodaTime = " + formatter.print(jodaTime));

आपके पास कैलेंडर का उपयोग किए बिना दिनांक के अलग-अलग क्षेत्रों में भी सीधी पहुंच है।

System.out.println("year = " + jodaTime.getYear());
System.out.println("month = " + jodaTime.getMonthOfYear());
System.out.println("day = " + jodaTime.getDayOfMonth());
System.out.println("hour = " + jodaTime.getHourOfDay());
System.out.println("minute = " + jodaTime.getMinuteOfHour());
System.out.println("second = " + jodaTime.getSecondOfMinute());
System.out.println("millis = " + jodaTime.getMillisOfSecond());

आउटपुट निम्नानुसार है:

jodaTime = 2010-04-16 18:09:26.060

year = 2010
month = 4
day = 16
hour = 18
minute = 9
second = 26
millis = 60

इसके अनुसार Http://www.joda.org/joda-time/ के

जावा के लिए जोडा-टाइम डी वास्तविक मानक तिथि और समय पुस्तकालय है। जावा एसई 8 से, उपयोगकर्ताओं को java.time (JSR-310) पर माइग्रेट करने के लिए कहा जाता है।


1
FYI करें, जोडा-टाइम परियोजना अब रखरखाव में है, इसकी टीम ने java.time कक्षाओं में प्रवास की सलाह दी है। Joda-Time और java.time दोनों का नेतृत्व एक ही आदमी, स्टीफन कोलबोर्न कर रहे हैं।
तुलसी बॉर्क

7
    // Java 8
    System.out.println(LocalDateTime.now().getYear());       // 2015
    System.out.println(LocalDateTime.now().getMonth());      // SEPTEMBER
    System.out.println(LocalDateTime.now().getDayOfMonth()); // 29
    System.out.println(LocalDateTime.now().getHour());       // 7
    System.out.println(LocalDateTime.now().getMinute());     // 36
    System.out.println(LocalDateTime.now().getSecond());     // 51
    System.out.println(LocalDateTime.now().get(ChronoField.MILLI_OF_SECOND)); // 100

    // Calendar
    System.out.println(Calendar.getInstance().get(Calendar.YEAR));         // 2015
    System.out.println(Calendar.getInstance().get(Calendar.MONTH ) + 1);   // 9
    System.out.println(Calendar.getInstance().get(Calendar.DAY_OF_MONTH)); // 29
    System.out.println(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));  // 7
    System.out.println(Calendar.getInstance().get(Calendar.MINUTE));       // 35
    System.out.println(Calendar.getInstance().get(Calendar.SECOND));       // 32
    System.out.println(Calendar.getInstance().get(Calendar.MILLISECOND));  // 481

    // Joda Time
    System.out.println(new DateTime().getYear());           // 2015
    System.out.println(new DateTime().getMonthOfYear());    // 9
    System.out.println(new DateTime().getDayOfMonth());     // 29
    System.out.println(new DateTime().getHourOfDay());      // 7
    System.out.println(new DateTime().getMinuteOfHour());   // 19
    System.out.println(new DateTime().getSecondOfMinute()); // 16
    System.out.println(new DateTime().getMillisOfSecond()); // 174

    // Formatted
    // 2015-09-28 17:50:25.756
    System.out.println(new Timestamp(System.currentTimeMillis()));

    // 2015-09-28T17:50:25.772
    System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH).format(new Date()));

    // Java 8
    // 2015-09-28T17:50:25.810
    System.out.println(LocalDateTime.now());

    // joda time
    // 2015-09-28 17:50:25.839
    System.out.println(DateTimeFormat.forPattern("YYYY-MM-dd HH:mm:ss.SSS").print(new org.joda.time.DateTime()));

यह उत्तर वास्तव में उस प्रश्न को संबोधित करता है, जिसने एक तिथि-समय मान के घटकों तक पहुंचने के बारे में पूछा था (सामान्य स्वरूपित तार नहीं)।
बेसिल बॉर्क

6

जावा 8 और बाद में, java.time पैकेज का उपयोग करें ।

ZonedDateTime.now().getYear();
ZonedDateTime.now().getMonthValue();
ZonedDateTime.now().getDayOfMonth();
ZonedDateTime.now().getHour();
ZonedDateTime.now().getMinute();
ZonedDateTime.now().getSecond();

ZonedDateTime.now()डिफ़ॉल्ट समय-क्षेत्र में सिस्टम घड़ी से वर्तमान दिनांक-समय को वापस करने वाली एक स्थिर विधि है। सभी प्राप्त विधियाँ एक intमान लौटाती हैं।


LocalDateTimeठीक इसके लिए गलत वर्ग है। समय क्षेत्र या ऑफ़सेट-यूटीसी की किसी भी अवधारणा को खोना, इसका उपयोग किसी विशिष्ट क्षण को ट्रैक करने के लिए नहीं किया जा सकता है, यह समय रेखा पर एक बिंदु नहीं है। उपयोग Instant, ZonedDateTimeया OffsetDateTimeइसके बजाय।
तुलसी बॉर्क

आप सही हे। मैंने एक का उपयोग करने के लिए अपना जवाब संशोधित किया है ZonedDateTime
ओरतोमला लोकनी

3

tl; डॉ

ZonedDateTime.now(                    // Capture current moment as seen in the wall-clock time used by the people of a particular region (a time zone).
    ZoneId.of( "America/Montreal" )   // Specify desired/expected time zone. Or pass `ZoneId.systemDefault` for the JVM’s current default time zone.
)                                     // Returns a `ZonedDateTime` object.
.getMinute()                          // Extract the minute of the hour of the time-of-day from the `ZonedDateTime` object.

42

ZonedDateTime

एक विशेष क्षेत्र (एक समय क्षेत्र) के लोगों द्वारा उपयोग की जाने वाली दीवार-घड़ी के समय में वर्तमान क्षण को देखने के लिए उपयोग करें ZonedDateTime

एक तिथि निर्धारित करने में एक समय क्षेत्र महत्वपूर्ण है। किसी भी क्षण के लिए, तिथि क्षेत्र के अनुसार दुनिया भर में भिन्न होती है। उदाहरण के लिए, पेरिस फ्रांस में मध्यरात्रि के कुछ मिनट बाद एक नया दिन है जबकि अभी भी "कल" मॉन्ट्रियल क्यूबेक में है

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

के रूप में , या , के प्रारूप में एक उचित समय क्षेत्र नाम निर्दिष्ट करें । कभी इस तरह के रूप में 3-4 पत्र संक्षिप्त नाम का उपयोग या के रूप में वे कर रहे हैं नहीं सच समय क्षेत्र, नहीं मानकीकृत, और यहां तक कि अद्वितीय नहीं (!)।continent/regionAmerica/MontrealAfrica/CasablancaPacific/AucklandESTIST

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

डेट-टाइम के टुकड़ों को बाहर निकालने के लिए कई गेटर्स में से किसी को कॉल करें।

int    year        = zdt.getYear() ;
int    monthNumber = zdt.getMonthValue() ;
String monthName   = zdt.getMonth().getDisplayName( TextStyle.FULL , Locale.JAPAN ) ;  // Locale determines human language and cultural norms used in localizing. Note that `Locale` has *nothing* to do with time zone.
int    dayOfMonth  = zdt.getDayOfMonth() ;
String dayOfWeek   = zdt.getDayOfWeek().getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; 
int    hour        = zdt.getHour() ;  // Extract the hour from the time-of-day.
int    minute      = zdt.getMinute() ;
int    second      = zdt.getSecond() ;
int    nano        = zdt.getNano() ;

Java.time वर्गों के लिए हल नैनोसेकंड । आपका प्रश्न मिलीसेकंड में एक सेकंड के अंश के लिए पूछा गया । जाहिर है, आप संभावित डेटा हानि की कीमत पर नैनोसेकंड को मिलिसेकंड में विभाजित करने के लिए एक लाख से विभाजित कर सकते हैं। या TimeUnitऐसे रूपांतरण के लिए एनम का उपयोग करें ।

long millis = TimeUnit.NANOSECONDS.toMillis( zdt.getNano() ) ;

DateTimeFormatter

एक उत्पादन करने के लिए Stringपाठ, उपयोग के टुकड़े गठबंधन करने के लिए DateTimeFormatterवर्ग। इस पर अधिक जानकारी के लिए स्टैक ओवरफ्लो खोजें।

Instant

आमतौर पर यूटीसी में क्षणों को ट्रैक करने के लिए सबसे अच्छा है। UTC के लिए एक ज़ोन किए गए दिनांक-समय से समायोजित करने के लिए, निकालें Instant

Instant instant = zdt.toInstant() ;

और फिर से वापस जाओ।

ZonedDateTime zdt = instant.atZone( ZoneId.of( "Africa/Tunis" ) ) ;

LocalDateTime

कुछ अन्य उत्तर LocalDateTimeकक्षा का उपयोग करते हैं । वास्तविक समय पर नज़र रखने के उद्देश्य के लिए उपयुक्त नहीं है, समय पर विशिष्ट क्षण, क्योंकि यह जानबूझकर समय क्षेत्र या ऑफसेट-यूटीसी से किसी भी अवधारणा का अभाव है।

तो इसके लिए क्या LocalDateTimeअच्छा है? LocalDateTimeजब आप किसी विशिष्ट इलाके के बजाय किसी भी इलाके या सभी इलाकों में तारीख और समय लागू करने का इरादा रखते हैं, तो इसका उपयोग करें ।

उदाहरण के लिए, इस साल क्रिसमस की शुरुआत होती है LocalDateTime.parse( "2018-12-25T00:00:00" )। जब तक आप समय क्षेत्र (ए ZoneId) प्राप्त करने के लिए आवेदन नहीं करते हैं, तब तक उस मूल्य का कोई अर्थ नहीं है ZonedDateTime। क्रिसमस पहले किरिबाती में होता है , बाद में न्यूजीलैंड में और पूर्व एशिया में होता है। घंटे बाद क्रिसमस भारत में शुरू होता है। अधिक घंटे बाद अफ्रीका और यूरोप में। और अभी भी कई घंटे बाद तक अमेरिका में क्रिसमस नहीं। किसी भी एक स्थान पर शुरू होने वाले क्रिसमस का प्रतिनिधित्व किया जाना चाहिए ZonedDateTime। क्रिसमस हर जगह एक के साथ प्रतिनिधित्व किया है LocalDateTime


जावा के बारे में

Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date, Calendar, और SimpleDateFormat

Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।

अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है

आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर का अनुपालन करें । तार की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*

Java.time कक्षाएं कहाँ से प्राप्त करें?


2

या java.sql.Timestamp का उपयोग करें। कैलेंडर थोड़े भारी है, मैं इसे उत्पादन कोड में उपयोग करने के खिलाफ सुझाऊंगा। जोदा बेहतर है।

import java.sql.Timestamp;

public class DateTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(new Timestamp(System.currentTimeMillis()));
    }
}

मुझे लगता है कि आपने प्रश्न और sql टाइमस्टैम्प के उपयोग को गलत समझा। आप सामान्य रूप से new Date()यहां उपयोग करेंगे । लेकिन आप अनुरोध के अनुसार आसानी से इसके अलग हिस्से कैसे प्राप्त करेंगे?
बालुसक

FYI करें, JDBC 4.2 के आगमन के साथ java.sql.Timestampइसे दबा दिया गया था java.time.Instant
तुलसी बॉर्क

0

जावा 7 कैलेंडर में एक पंक्ति

new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(Calendar.getInstance().getTime())

1
परेशान कैलेंडर और SimpleDateFormat कक्षाएं अब पूरी तरह से पुरानी हैं, java.time कक्षाओं द्वारा पूरी तरह से पृथक हैं। आधुनिक दृष्टिकोण के लिए BalusC द्वारा उत्तर देखें । जावा-टाइम की अधिकांश कार्यक्षमता थ्रीटेन-बैकपोर्ट परियोजना में जावा 6 और 7 के लिए वापस पोर्ट की गई है।
तुलसी बॉर्क

-2

Java.util.Calendar वर्ग और उसके व्युत्पन्न के लिए एपीआई प्रलेखन को देखें (आप विशेष रूप से ग्रेगोरियन कालेंडर वर्ग में रुचि रख सकते हैं)।


FYI करें, जैसे परेशानी पुराने तिथि-समय कक्षाएं java.util.Date, java.util.Calendarऔर java.text.SimpleDateFormatअब कर रहे हैं विरासत , द्वारा का स्थान ले लिया java.time जावा 8 और बाद में बनाया गया वर्गों। ओरेकल द्वारा ट्यूटोरियल देखें ।
बेसिल बोर्क

-2

कैलेंडर अब = नया कैलेंडर () // या नया ग्रेगोरियन कैलेन्डर (), या आपको जो भी स्वाद की आवश्यकता हो

अब। अब और नहीं

आदि।


3
नमस्ते, मेरे पास यह समझने में कठिन समय है कि आप पहले से दिए गए उत्तर को खराब तरीके से क्यों दोहरा रहे हैं। कृपया विस्तृत करें :)
बालुस

3
MONTHऔर HOURस्थिर स्थिरांक हैं Calendar, उदाहरण के गुण नहीं।
जोसेफ अर्ल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.