java - जावा में डेट ऑब्जेक्ट को समय कैसे सेट करें




date datetime calendar (4)

मैंने जावा में Date ऑब्जेक्ट बनाया है। जब मैं ऐसा करता हूं, तो यह कुछ दिखाता है: date=Tue Aug 09 00:00:00 IST 2011 । नतीजतन, ऐसा प्रतीत होता है कि मेरी एक्सेल फ़ाइल एक दिन से कम है (27 फीब 26 फीब हो जाती है और इसी तरह) मुझे लगता है कि यह समय के कारण होना चाहिए। मैं इसे 5:30 बजे की तरह कुछ कैसे सेट कर सकता हूं?


Answers

क्या आप कोड ऑब्जेक्ट सेट करने के लिए उपयोग करने वाले कोड को दिखा सकते हैं? वैसे भी <आप तिथि के अंतःकरण के लिए इस कोड का उपयोग कर सकते हैं:

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2011-01-01 00:00:00")


मुझे आधुनिक जवाब देना चाहिए। इसमें java.time , आधुनिक जावा दिनांक और समय API का उपयोग करना शामिल है, न कि पुराने Date और न ही Calendar सिवाय इसके कि इसमें से बचने का कोई तरीका नहीं है।

आपकी समस्या वास्तव में एक टाइमज़ोन मुद्दा है। जब यह अगस्त 09 00:00:00 IST 2011 है, आईएसटी मध्यरात्रि के पश्चिम में समय क्षेत्र में अभी तक पहुंचा नहीं गया है। यह अभी भी 8 अगस्त है। उदाहरण के लिए, एक्सेल में तारीख डालने के लिए आपका एपीआई यूटीसी की अपेक्षा करता है, तो तिथि आपके द्वारा लक्षित किए जाने से पहले दिन होगी। मेरा मानना ​​है कि वास्तविक और अच्छा समाधान 00:00 यूटीसी (या जो भी समय क्षेत्र या ऑफ़सेट की उम्मीद है और दूसरे छोर पर उपयोग किया जाता है) का दिनांक-समय तैयार करना है।

    LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
    ZonedDateTime utcDateDime = yourDate.atStartOfDay(ZoneOffset.UTC);
    System.out.println(utcDateDime);

यह प्रिंट

2018-02-27T00:00Z

Z मतलब यूटीसी है (इसे यूटीसी या ज़ुलू समय क्षेत्र से ऑफसेट शून्य के रूप में सोचें)। अभी भी बेहतर है, अगर आप LocalDate कोड को एक्सेल में पहली कोड लाइन से पास कर सकते हैं। इसमें समय-समय शामिल नहीं है, इसलिए कोई भ्रम संभव नहीं है। दूसरी तरफ, यदि आपको उस के लिए पुरानी शैली की Date ऑब्जेक्ट की आवश्यकता है, तो Date को सौंपने से ठीक पहले:

    Date oldfashionedDate = Date.from(utcDateDime.toInstant());
    System.out.println(oldfashionedDate);

मेरे कंप्यूटर पर यह प्रिंट

Tue Feb 27 01:00:00 CET 2018

मूर्ख मत बनो, यह सही है। मेरा समय क्षेत्र (मध्य यूरोपीय समय) फरवरी (मानक समय) में यूटीसी से +01: 00 ऑफसेट पर है, इसलिए 01:00:00 यहां 00:00:00 यूटीसी के बराबर है। यह सिर्फ Date.toString() JVMs समय क्षेत्र को Date.toString() और स्ट्रिंग के उत्पादन के लिए इसका उपयोग कर रहा है।

मैं इसे 5:30 बजे की तरह कुछ कैसे सेट कर सकता हूं?

सीधे अपने सीधे प्रश्न का उत्तर देने के लिए, यदि आपके पास ZonedDateTime , OffsetDateTime या LocalDateTime , तो इन सभी मामलों में निम्नलिखित आप जो भी LocalDateTime उसे पूरा करेंगे:

    yourDateTime = yourDateTime.with(LocalTime.of(17, 30));

यदि yourDateTime LocalDateTime 2018-02-27T00:00 का 2018-02-27T00:00 yourDateTime था, तो यह अब 2018-02-27T17:30 । इसी तरह अन्य प्रकार के लिए, केवल वे ऑफसेट और समय क्षेत्र भी उपयुक्त के रूप में शामिल हैं।

यदि आपके पास केवल पहले स्निपेट की तरह ही एक तिथि थी, तो आप इसमें समय-समय पर जानकारी भी जोड़ सकते हैं:

    LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
    LocalDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30));

अधिकांश उद्देश्यों के लिए आपको समय-समय पर एक विशिष्ट समय क्षेत्र में जोड़ना पसंद करना चाहिए, उदाहरण के लिए

    ZonedDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30))
            .atZone(ZoneId.of("Asia/Kolkata"));

यह 2018-02-27T17:30+05:30[Asia/Kolkata]

Date और Calendar बनाम java.time

आपके द्वारा उपयोग की जाने वाली Date क्लास के साथ-साथ Calendar और SimpleDateFormat अन्य उत्तरों में उपयोग की जाती है, जो लंबे समय से पुरानी हैं, और विशेष रूप से SimpleDateFormat को परेशानी साबित हुई है। सभी मामलों में आधुनिक जावा दिनांक और समय एपीआई के साथ काम करने के लिए बहुत अच्छा है। यही कारण है कि मैं यह जवाब एक पुराने प्रश्न को प्रदान करना चाहता था जिसे अभी भी देखा जा रहा है।

लिंक: ओरेकल ट्यूटोरियल दिनांक समय , यह बताते हुए कि java.time का उपयोग कैसे करें।


SQL Server 2008 और उच्चतर पर, आपको आज तक CONVERT करना चाहिए:

SELECT CONVERT(date, getdate())

पुराने संस्करणों पर, आप निम्न कार्य कर सकते हैं:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))

उदाहरण के लिए

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))

मुझे देता है

2008-09-22 00:00:00.000

पेशेवरों:

  • कोई varchar <-> datetime रूपांतरण की आवश्यकता नहीं है
  • locale बारे में सोचने की जरूरत नहीं है




java date datetime calendar