Java.util.Date का टाइम ज़ोन कैसे सेट करें?


225

मैंने एक java.util.Dateसे पार्स किया है , Stringलेकिन यह स्थानीय समय क्षेत्र को dateऑब्जेक्ट के समय क्षेत्र के रूप में सेट कर रहा है ।

समय क्षेत्र निर्दिष्ट नहीं Stringहै जिसमें Dateसे पार्स किया गया है। मैं dateऑब्जेक्ट का एक विशिष्ट समय क्षेत्र सेट करना चाहता हूं ।

मैं उसे कैसे कर सकता हूँ?


8
जबकि वास्तव में आपके प्रश्न का उत्तर नहीं है, मैंने यहां कुछ समय का उल्लेख करने के बाद जोडा टाइम का उपयोग किया है। यह मुझे मानक API की तुलना में अधिक तर्कसंगत लगता है, और इस तरह की चीज़ को बहुत आसानी से कर सकता है।
Clstrfsck

2
@msandiford आजकल, Joda.time के बजाय java.time कक्षाओं का उपयोग करें । Joda समय परियोजना में है रखरखाव मोड टीम के लिए प्रवास की सलाह दे के साथ, java.time कक्षाएं। ओरेकल द्वारा ट्यूटोरियल देखें ।
तुलसी बोर्के

जवाबों:


315

DateFormat का उपयोग करें। उदाहरण के लिए,

SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = isoFormat.parse("2010-05-23T09:01:02");

6
यदि तिथि कैलेंडर वर्ग से बनाई गई है, तो आप कैलेंडर के लिए समय-क्षेत्र निर्धारित कर सकते हैं।
lwpro2

19
@ lwpro2 यह कथन भ्रामक है; आप कैलेंडर ऑब्जेक्ट के लिए टाइमज़ोन सेट कर सकते हैं, लेकिन गेटटाइम () विधि का उपयोग करके उसमें से एक दिनांक ऑब्जेक्ट प्राप्त करना होस्ट कंप्यूटर के समय क्षेत्र के साथ दिनांक ऑब्जेक्ट वापस कर देगा।
BrDaHa 21

मुझे 02/20/15 14:44 को पार्स करने में परेशानी हो रही है। क्या कोई मदद कर सकता है
MS

@BrDaHa सही है। आपको TimeZone.setDefault()कॉल करने से पहले आवश्यकता होगी getTime()ताकि नई दिनांक ऑब्जेक्ट उस समय क्षेत्र में हो जाएगी जिसे आप चाहते हैं। JDK 1.8 में, Calendar.getTime()कॉल करता है return new Date(getTimeInMillis());
jpllosa

182

ध्यान रखें कि java.util.Dateवस्तुओं में किसी भी समय की जानकारी नहीं होती है - आप किसी Dateवस्तु पर टाइमजोन सेट नहीं कर सकते हैं । केवल एक चीज जिसमें कोई Dateवस्तु शामिल है वह "युग" के बाद से कई मिलीसेकंड की संख्या है - 1 जनवरी 1970, 00:00:00 यूटीसी।

जैसा कि जेडजेड कोडर दिखाता है, आप समय-सारणी को DateFormatऑब्जेक्ट पर सेट करते हैं , यह बताने के लिए कि आप किस समय-क्षेत्र में दिनांक और समय प्रदर्शित करना चाहते हैं।


77
एक Googling के बाद, प्रयोग और निर्वासन, मैंने महसूस किया है कि यह उत्तर के लिए एक सटीक और उपयोगी जोड़ है - और मूल्य को उजागर करने के लिए: दिनांक में केवल मिलीसेकंड मान शामिल है । यदि आप स्रोत को देखते हैं, तो एक बहुत ही सिर्फ एक longक्षेत्र कहा जाता है fastTimeDate.toString()वास्तव में Calendarइस मिलीसेकंड समय की व्याख्या करने के लिए एक का उपयोग करता है । तो एक प्रिंट आउट करने Dateसे ऐसा लगता है कि एक (डिफ़ॉल्ट) टाइमज़ोन है, जिससे उस टाइमज़ोन को सेट करने के बारे में समझने योग्य प्रश्न पैदा होते हैं।
डेविड कार्बोनी

3
दिनांक ऑब्जेक्ट्स के अंदर IS समयक्षेत्र जानकारी है। लेकिन यह सच हो सकता है, आप इसे बदल नहीं सकते।
lwpro2

3
@ Iwpro2, जेसपर का दावा है (और मैं सहमत हूं) कि दिनांक ऑब्जेक्ट समय क्षेत्र को संग्रहीत नहीं करता है। यदि आप दावा कर रहे हैं कि java.util के अंदर समय क्षेत्र जमा है। कृपया एक संदर्भ प्रदान करें।
जिम

6
@ जय, यह java.util.Date के लिए स्रोत कोड है। इसमें FastTime के साथ unix epoch और साथ ही BaseCalendar.Date cdate शामिल है जो फास्टटाइम के पक्ष में उपयोग किया जाता है, यदि इसे परिभाषित किया गया है। उस एक में समयक्षेत्र की जानकारी होती है। मैं इसे समझता हूं ताकि एक तिथि उदाहरण में समय क्षेत्र की जानकारी हो सकती है, लेकिन यह नहीं हो सकता है।
ईएस

2
@ मैं नहीं कहता कि आप इसे सेट कर सकते हैं, मैं कह रहा था कि इसमें यह जानकारी है। मैं इसे उपयोगकर्ता के रूप में स्थापित करने का कोई तरीका नहीं देखता। मुझे लगता है कि ओपी सही है कि यह हमेशा उपयोगकर्ता / सिस्टम डिफ़ॉल्ट टाइमज़ोन लगता है।
eis

95

tl; डॉ

… एक स्ट्रिंग से… पार्स किया गया… समय क्षेत्र निर्दिष्ट नहीं है… मैं एक विशिष्ट समय क्षेत्र सेट करना चाहता हूं

LocalDateTime.parse( "2018-01-23T01:23:45.123456789" )  // Parse string, lacking an offset-from-UTC and lacking a time zone, as a `LocalDateTime`.
    .atZone( ZoneId.of( "Africa/Tunis" ) )              // Assign the time zone for which you are certain this date-time was intended. Instantiates a `ZonedDateTime` object.

जूडे में नो टाइम जोन

अन्य सही उत्तरों कहा गया है, एक java.util.Date कोई समय क्षेत्र है । यह UTC / GMT (नो टाइम ज़ोन ऑफ़सेट) का प्रतिनिधित्व करता है । बहुत भ्रामक है क्योंकि इसका toStringतरीका स्ट्रिंग प्रतिनिधित्व प्रस्तुत करते समय जेवीएम के डिफ़ॉल्ट समय क्षेत्र को लागू करता है।

जूडे से बचें

इसके और कई अन्य कारणों के लिए, आपको अंतर्निहित java.util.Date & .Calendar & java.text.SimpleDateFormat का उपयोग करने से बचना चाहिए। वे कुख्यात हैं।

इसके बजाय जावा 8 के साथ बंडल java.time पैकेज का उपयोग करें ।

java.time

Java.time कक्षाएं समय पर तीन तरीकों से एक क्षण का प्रतिनिधित्व कर सकती हैं:

  • UTC ( Instant)
  • एक ऑफसेट के OffsetDateTimeसाथ ( साथ ZoneOffset)
  • एक समय क्षेत्र के ZonedDateTimeसाथ ( ZoneId)

Instant

में java.time , मूल निर्माण खंड है Instant, UTC में समय रेखा पर एक पल। Instantअपने व्यावसायिक तर्क के लिए वस्तुओं का उपयोग करें ।

Instant instant = Instant.now();

OffsetDateTime

कुछ इलाके की दीवार-घड़ी के समय में समायोजित करने के लिए एक ऑफसेट-यू-यूटीसी लागू करें ।

ZoneOffsetपाने के लिए एक लागू करें OffsetDateTime

ZoneOffset zoneOffset = ZoneOffset.of( "-04:00" );
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , zoneOffset );

ZonedDateTime

बेहतर है कि एक टाइम ज़ोन लागू किया जाए , एक ऑफसेट प्लस जैसे कि डेलाइट सेविंग टाइम (डीएसटी) जैसी विसंगतियों से निपटने के लिए नियम ।

पाने के ZoneIdलिए एक में आवेदन करें । हमेशा एक उचित समय क्षेत्र नाम निर्दिष्ट करें । कभी भी 3-4 संक्षिप्ताक्षरों का उपयोग न करें जैसे कि या तो अद्वितीय या मानकीकृत नहीं हैं।InstantZonedDateTimeESTIST

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

LocalDateTime

यदि इनपुट स्ट्रिंग में ऑफसेट या ज़ोन के किसी भी संकेतक की कमी है, तो पार्स ए LocalDateTime

यदि आप निश्चित समय क्षेत्र के बारे में निश्चित हैं, तो ए ZoneIdका उत्पादन करने के लिए असाइन करें ZonedDateTime। ऊपर tl में कोड उदाहरण देखें , शीर्ष पर ड्र अनुभाग।

स्वरूपित स्ट्रिंग्स

toStringमानक आईएसओ 8601 प्रारूप में दिनांक-समय मान का प्रतिनिधित्व करने वाले स्ट्रिंग उत्पन्न करने के लिए इन तीन वर्गों में से किसी पर विधि को कॉल करें । ZonedDateTimeवर्ग कोष्ठक में समय क्षेत्र का नाम जोड़कर मानक प्रारूप फैली हुई है।

String outputInstant = instant.toString(); // Ex: 2011-12-03T10:15:30Z
String outputOdt = odt.toString(); // Ex: 2007-12-03T10:15:30+01:00
String outputZdt = zdt.toString(); // Ex: 2007-12-03T10:15:30+01:00[Europe/Paris]

अन्य प्रारूपों के लिए DateTimeFormatterवर्ग का उपयोग करें । आम तौर पर यह बताने के लिए कि कक्षा उपयोगकर्ता की अपेक्षित मानव भाषा और सांस्कृतिक मानदंडों का उपयोग करके स्थानीयकृत प्रारूप तैयार करती है। या आप एक विशेष प्रारूप निर्दिष्ट कर सकते हैं।


जावा में सभी तिथि-समय प्रकारों की तालिका, दोनों आधुनिक और विरासत


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

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

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

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

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

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

ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval, YearWeek, YearQuarter, और अधिक


Joda समय

जबकि जोडा-टाइम अभी भी सक्रिय रूप से बना हुआ है, इसके निर्माताओं ने हमें सुविधाजनक तरीके से जैसे ही java.time पर माइग्रेट करने के लिए कहा है। मैं इस खंड को एक संदर्भ के रूप में बरकरार रखता हूं, लेकिन मैं java.timeइसके बजाय ऊपर दिए गए अनुभाग का उपयोग करने का सुझाव देता हूं ।

में Joda समय , दिनांक-समय वस्तु ( DateTime) सही मायने में उसको दिए गए समय क्षेत्र में पता है। इसका मतलब है कि UTC से एक ऑफसेट और उस समय क्षेत्र के डेलाइट सेविंग टाइम (DST) और इस तरह की अन्य विसंगतियों के नियमों और इतिहास।

String input = "2014-01-02T03:04:05";
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Kolkata" );
DateTime dateTimeIndia = new DateTime( input, timeZone );
DateTime dateTimeUtcGmt = dateTimeIndia.withZone( DateTimeZone.UTC );

आईएसओ 8601 प्रारूप toStringमें एक स्ट्रिंग उत्पन्न करने के लिए विधि को कॉल करें ।

String output = dateTimeIndia.toString();

Joda-Time सभी प्रकार के अन्य स्ट्रींग स्वरूपों को बनाने के लिए समृद्ध क्षमता प्रदान करता है।

यदि आवश्यक हो, तो आप Joda-Time DateTime से java.util.Date में परिवर्तित कर सकते हैं।

Java.util.Date date = dateTimeIndia.toDate();

कई अन्य उदाहरणों को खोजने के लिए "जॉदा तिथि" के लिए स्टैकऑवरफ़्लो खोजें, कुछ काफी विस्तृत।


असल में वहाँ है एक समय क्षेत्र एक java.util.Date में एम्बेडेड, कुछ आंतरिक कार्यों के लिए इस्तेमाल किया (इस जवाब पर टिप्पणी देखें)। लेकिन इस आंतरिक समय क्षेत्र को एक संपत्ति के रूप में उजागर नहीं किया गया है, और इसे सेट नहीं किया जा सकता है। यह आंतरिक समय क्षेत्र , दिनांक-समय मान के स्ट्रिंग प्रतिनिधित्व को उत्पन्न करने की विधि द्वारा उपयोग किया जाने वाला नहीं है toString; इसके बजाय JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र को मक्खी पर लागू किया जाता है। इसलिए, आशुलिपि के रूप में, हम अक्सर कहते हैं "juate का कोई समय क्षेत्र नहीं है"। भ्रमित? हाँ। फिर भी इन थके हुए पुराने वर्गों से बचने का एक और कारण।


3
"जूडे में नो टाइम ज़ोन" गलत है। BaseCalendar.Date cdateसेट होने पर इसकी संपत्ति में संग्रहीत ज्यूडेट में एक समय क्षेत्र की जानकारी होती है । यहां स्रोत कोड पर एक नज़र डालें । आप कॉल करके JVM के डिफ़ॉल्ट समयक्षेत्र को बदलने के अलावा किसी ज्यूडेट ऑब्जेक्ट के टाइमज़ोन को सेट नहीं कर सकते TimeZone.setDefault(TimeZone.getTimeZone("NEW_TIME_ZONE"));। इस प्रकार, एक टाइमज़ोन ऑफसेट है और आप पदावनत विधि को कॉल करके ऑफ़सेट प्राप्त कर सकते हैं juate.getTimezoneOffset ()
थाई बुई

3
@blquythai सही, आपने अपना होमवर्क किया। जैसा कि मैंने किया था, पहले उस सोर्स कोड को देखा था। वहाँ है एक समय क्षेत्र वहाँ में दफन कर दिया। लेकिन सभी व्यावहारिक उद्देश्यों के लिए उस समय क्षेत्र की अनदेखी की जाती है। एक java.util.Date किसी भी समय क्षेत्र के बिना काम करता है, प्रभावी रूप से UTC में, उस दफन समय क्षेत्र की अनदेखी करते हुए। toStringजेवीएम के वर्तमान डिफ़ॉल्ट समय क्षेत्र को लागू करने वाली विधि को छोड़कर ; फिर से दफन समय क्षेत्र की अनदेखी। तो संक्षिप्तता के लिए, हम कहते हैं कि एक java.util.Date का कोई समय क्षेत्र नहीं है। आर्ट की तरह , यह एक झूठ है जो सच कहता है।
बेसिल बोर्के

@blquythai कॉल करने के लिए TimeZone.setDefault, आप java.util.ate ऑब्जेक्ट का समय क्षेत्र सेट नहीं कर रहे हैं - दिनांक ऑब्जेक्ट अभी भी UTC में प्रभावी रूप से कार्य करते हुए, उसके दफन समय क्षेत्र को अनदेखा करता है। आप दिनांक की toStringविधि को प्रभावित करेंगे । डिफ़ॉल्ट सेट करने से JVM का डिफ़ॉल्ट समय क्षेत्र बदल जाता है जो आमतौर पर होस्ट ऑपरेटिंग सिस्टम के टाइम ज़ोन पर सेट होता है। उस कॉल की अनुशंसा नहीं की जाती है क्योंकि यह उस JVM में चल रहे सभी ऐप के सभी थ्रेड्स के सभी कोड को प्रभावित करता है, और ऐसा ही करता है, जैसा कि वे निष्पादित कर रहे हैं। अशिष्ट और खतरनाक होने के नाते, उस कॉल को केवल अंतिम उपाय माना जाना चाहिए।
तुलसी बॉर्क

5
उस समय क्षेत्र बहुत बार प्रयोग किया जाता है (में इस्तेमाल किया equals, hashcode, getTime..) आप पर एक नज़र डालें तो equalsविधि है, यह कहता है getTime()जो कॉल getTimeImpl(), जो कॉल normalize()करता है, तो cdateसंपत्ति सामान्यीकृत नहीं है। में normalize()विधि, पिछले अगर हालत अपने संग्रहीत समय क्षेत्र जानकारी के आधार पर फिर से गणना करता है 1/1/70 से मिलीसेकेंड अगर के समय क्षेत्र के cdateवर्तमान JVM वातावरण उस पर चल रहा है की समय क्षेत्र से अलग है। (जरा गौर करें sun.util.calendar.AbstractCalendar getCalendarDate(long millis, CalendarDate date))
थाई बुई

2
आपकी सलाह के अनुसार, कुछ समय पहले मैंने एम्बेडेड ज़ोन के बारे में बताया।
तुलसी Bourque

75

आप JVM स्तर पर समयक्षेत्र भी निर्धारित कर सकते हैं

Date date1 = new Date();
System.out.println(date1);

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
// or pass in a command line arg: -Duser.timezone="UTC"

Date date2 = new Date();
System.out.println(date2);

उत्पादन:

Thu Sep 05 10:11:12 EDT 2013
Thu Sep 05 14:11:12 UTC 2013

इससे मुझे मदद मिली। एसडीएफ में टाइमजोन सेट करने से कोई फर्क नहीं पड़ा
विष्णु विष्णुनाथ

मुझे लगता है कि यह अधिक विश्वसनीय है। (+1)
फोब्बर

23
खबरदार: कॉलिंग TimeZone.setDefaultबल्कि कठोर है, क्योंकि यह पूरे JVM को प्रभावित करता है, अन्य सभी वस्तुओं और थ्रेड्स को प्रभावित करता है। देखें इस सवाल का जवाब भी अधिक जटिलताओं सहित यदि आप एक SecurityManager साथ चल रहे हैं जानकारी के लिए। और अधिक जटिलता जोड़ना: यह व्यवहार जावा के विभिन्न संस्करणों में बदल गया है, जैसा कि इस प्रश्न में चर्चा की गई है ।
बेसिल बॉर्क

यह इस कथन के बाद पैदा होने वाले सभी धागों में एक सामान्य समय क्षेत्र है, है ना?
जयदेव

यह स्वीकार किए गए प्रश्न की तुलना में बेहतर उत्तर है।
फ्रैंकग्रेक्स

10

यदि आपको केवल मानक JDK वर्गों के साथ काम करना चाहिए तो आप इसका उपयोग कर सकते हैं:

/**
 * Converts the given <code>date</code> from the <code>fromTimeZone</code> to the
 * <code>toTimeZone</code>.  Since java.util.Date has does not really store time zome
 * information, this actually converts the date to the date that it would be in the
 * other time zone.
 * @param date
 * @param fromTimeZone
 * @param toTimeZone
 * @return
 */
public static Date convertTimeZone(Date date, TimeZone fromTimeZone, TimeZone toTimeZone)
{
    long fromTimeZoneOffset = getTimeZoneUTCAndDSTOffset(date, fromTimeZone);
    long toTimeZoneOffset = getTimeZoneUTCAndDSTOffset(date, toTimeZone);

    return new Date(date.getTime() + (toTimeZoneOffset - fromTimeZoneOffset));
}

/**
 * Calculates the offset of the <code>timeZone</code> from UTC, factoring in any
 * additional offset due to the time zone being in daylight savings time as of
 * the given <code>date</code>.
 * @param date
 * @param timeZone
 * @return
 */
private static long getTimeZoneUTCAndDSTOffset(Date date, TimeZone timeZone)
{
    long timeZoneDSTOffset = 0;
    if(timeZone.inDaylightTime(date))
    {
        timeZoneDSTOffset = timeZone.getDSTSavings();
    }

    return timeZone.getRawOffset() + timeZoneDSTOffset;
}

श्रेय इस पद को जाता है ।


1
टाइमज़ोन की ऑफसेट हमेशा स्थिर नहीं होती हैं। वास्तव में, वे भू-राजनीतिक कारणों से बदल सकते हैं। TimeZone.getDSTSavings () इसे ध्यान में नहीं रखता है, और हमेशा वर्तमान ऑफसेट देता है। इसका मतलब यह है कि अगर आप उस तारीख के बाद से ऑफ़सेट बदल चुके हैं, तो onTimeZone / toTimeZone के साथ एक ऐतिहासिक तारीख से निपटने के मामले में आपको एक गलत रूपांतरण मिल सकता है।
anderobot

6

java.util.Calendarसिर्फ JDK कक्षाओं का उपयोग करके समय क्षेत्र को संभालने का सामान्य तरीका है। अपाचे कॉमन्स के पास कुछ और विकल्प / उपयोगिताओं हैं जो सहायक हो सकते हैं। संपादित Spong के नोट मुझे याद दिलाया कि मैं के बारे में वास्तव में अच्छी बातें सुना है Joda समय (हालांकि मैं इसे अपने आप उपयोग नहीं किया है)।


Joda समय के लिए +1। हालांकि यह कोई अतिरिक्त कार्यक्षमता प्रदान नहीं करता है जो आप मानक जावा एपीआई से नहीं प्राप्त कर सकते हैं (जो मैंने किसी भी स्थिति में पाया है - अन्यथा दिखाए जाने की खुशी), जोडा टाइम कुछ कार्यों को आसान बनाता है।
जोशुआ हचिसन

2
@JoshuaHutchison Joda समय है टन अतिरिक्त कार्यक्षमता की। उदाहरण: का प्रतिनिधित्व वर्गों के साथ समय की फैला Period, Duration, और Interval। उन फैला तुलना तरीकों में शामिल हैं जैसे contains, abuts, overlap, और gap। और PeriodFormatterBuilder"15 साल और 8 महीने" जैसे वर्णनात्मक वाक्यांशों का निर्माण कर सकते हैं।
बेसिल बॉर्क

1

स्ट्रिंग को दिनांक में परिवर्तित करें और इसे SimpleDateFormat के साथ करें।

    SimpleDateFormat readFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    readFormat.setTimeZone(TimeZone.getTimeZone("GMT" + timezoneOffset));
    String dateStr = readFormat.format(date);
    SimpleDateFormat writeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    Date date = writeFormat.parse(dateStr);

1
स्टैक ओवरफ्लो के उत्तर में कुछ चर्चा या स्पष्टीकरण होने की उम्मीद है। यह साइट एक कोड स्निपेट लाइब्रेरी से अधिक है।
बेसिल बोर्क

आपकी टिप्पणी के लिए @Basil Bourque धन्यवाद। मैं उत्तर संपादित
avisper

0

यदि किसी को कभी भी इसकी आवश्यकता होती है, यदि आपको XMLGregorianCalendarयूटीसी से अपने वर्तमान समयक्षेत्र में एक समयक्षेत्र बदलने की आवश्यकता है , तो आपको केवल समय-सीमा निर्धारित करने की आवश्यकता है 0, फिर कॉल करें toGregorianCalendar()- यह उसी समय-क्षेत्र में रहेगा, लेकिन यह Dateजानता है कि इसे कैसे परिवर्तित किया जाए तुम्हारा, तो तुम वहाँ से डेटा प्राप्त कर सकते हैं।

XMLGregorianCalendar xmlStartTime = DatatypeFactory.newInstance()
    .newXMLGregorianCalendar(
        ((GregorianCalendar)GregorianCalendar.getInstance());
xmlStartTime.setTimezone(0);
GregorianCalendar startCalendar = xmlStartTime.toGregorianCalendar();
Date startDate = startCalendar.getTime();
XMLGregorianCalendar xmlStartTime = DatatypeFactory.newInstance()
    .newXMLGregorianCalendar(startCalendar);
xmlStartTime.setHour(startDate.getHours());
xmlStartTime.setDay(startDate.getDate());
xmlStartTime.setMinute(startDate.getMinutes());
xmlStartTime.setMonth(startDate.getMonth()+1);
xmlStartTime.setTimezone(-startDate.getTimezoneOffset());
xmlStartTime.setSecond(startDate.getSeconds());
xmlStartTime.setYear(startDate.getYear() + 1900);
System.out.println(xmlStartTime.toString());

परिणाम:

2015-08-26T12:02:27.183Z
2015-08-26T14:02:27.183+02:00

0

यह कोड एक ऐप में मददगार था, जिस पर मैं काम कर रहा था:

    Instant date = null;
    Date sdf = null;
    String formatTemplate = "EEE MMM dd yyyy HH:mm:ss";
    try {
        SimpleDateFormat isoFormat = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss");
        isoFormat.setTimeZone(TimeZone.getTimeZone(ZoneId.of("US/Pacific")));
        sdf = isoFormat.parse(timeAtWhichToMakeAvailable);
        date = sdf.toInstant();

    } catch (Exception e) {
        System.out.println("did not parse: " + timeAtWhichToMakeAvailable);
    }

    LOGGER.info("timeAtWhichToMakeAvailable: " + timeAtWhichToMakeAvailable);
    LOGGER.info("sdf: " + sdf);
    LOGGER.info("parsed to: " + date);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.