tl; डॉ
Instant.ofEpochSecond(1_220_227_200L)
नो योर डाटा
लोग एक epoch के बाद से एक नंबर के रूप में समय पर नज़र रखने में विभिन्न precisions का उपयोग करें। तो जब आप एक अवधि के बाद कुछ संख्या गिनती के रूप में व्याख्या की जा करने के लिए प्राप्त करने के लिए, आप यह निर्धारित करना चाहिए:
- क्या युग?
Many epochs dates विभिन्न प्रणालियों में उपयोग किया गया है। आम तौर पर POSIX/Unix time होता है, जहां युग 1 9 70 में यूटीसी में पहला पल है। लेकिन आपको इस युग को मानना नहीं चाहिए।
- क्या सटीकता है?
क्या हम युग के बाद सेकंड, milliseconds, microseconds, या nanoseconds बात कर रहे हैं?
- किस समय क्षेत्र?
आमतौर पर युग के बाद से एक गिनती UTC/जीएमटी समय क्षेत्र में है, यानी, इसमें कोई समय क्षेत्र ऑफसेट नहीं है। लेकिन कभी-कभी, अनुभवहीन या डेट-टाइम अज्ञानी प्रोग्रामर शामिल होने पर, एक अंतर्निहित समय क्षेत्र हो सकता है।
आपके मामले में, जैसा कि अन्य ने नोट किया है, आपको यूनिक्स युग के बाद से सेकंड दिए गए हैं। लेकिन आप उन सेकंड को एक निर्माता को पास कर रहे हैं जो मिलीसेकंड की अपेक्षा करता है। तो समाधान 1,000 से गुणा करना है।
सबक सीखा:
- निर्धारित करें, यह न मानें, प्राप्त डेटा के अर्थ।
- the doc पढ़ें।

अपने डेटा
आपका डाटा पूरे सेकंड में हो रहा है। हम 1970 के शुरुआत के एक युग मान, और अगर हम UTC समय क्षेत्र मान, तो 1,220,227,200
सितंबर 2008 के पहले दिन के पहले पल
Joda समय
java.util.Date है और जावा के साथ बंडल कैलेंडर कक्षाएं कुख्यात परेशानी हैं। उनसे बचें।इसके बजाए या तो Joda-Time लाइब्रेरी या जावा 8 में बंडल किए गए नए java.time package (और जोडा-टाइम द्वारा प्रेरित) का उपयोग करें।
ध्यान दें कि j.u.Date के विपरीत, जोडा-टाइम में DateTime
वास्तव में अपना स्वयं का सौंपा time zone जानता है। तो उदाहरण में जोडा-टाइम 2.4 कोड नीचे देखा गया है, ध्यान दें कि हम पहले यूटीसी की डिफ़ॉल्ट धारणा का उपयोग करके मिलीसेकंड का विश्लेषण करते हैं। फिर, दूसरी बात, हम समायोजित करने के लिए पेरिस का समय क्षेत्र असाइन करते हैं। ब्रह्मांड की समयरेखा में एक ही पल, लेकिन अलग wall-clock time। प्रदर्शन के लिए, हम यूटीसी को फिर से समायोजित करते हैं। निहित डिफ़ॉल्ट (अक्सर डेट-टाइम काम में परेशानी का कारण) पर भरोसा करने के बजाए अपने वांछित/अपेक्षित समय क्षेत्र को स्पष्ट रूप से निर्दिष्ट करने के लिए लगभग हमेशा बेहतर होता है।
हमें डेटटाइम बनाने के लिए मिलीसेकंड की आवश्यकता है। तो सेकंड का अपना इनपुट लें, और एक हजार से गुणा करें। ध्यान दें कि परिणाम 64-बिट long
होना चाहिए क्योंकि हम 32-बिट int
ओवरफ़्लो करेंगे।
long input = 1_220_227_200L; // Note the "L" appended to long integer literals.
long milliseconds = (input * 1_000L); // Use a "long", not the usual "int". Note the appended "L".
फ़ीड जो कि कन्स्ट्रक्टर को मिलीसेकंड की गिनती है। उस विशेष निर्माता का मानना है कि गिनती 1 9 70 के यूनिक्स युग से है। इसलिए निर्माण के बाद वांछित समय क्षेत्र समायोजित करें।
proper time zone नाम, महाद्वीप और शहर/क्षेत्र का संयोजन उपयोग करें। EST
जैसे 3 या 4 अक्षर कोडों का कभी भी उपयोग न करें क्योंकि वे न तो मानकीकृत अद्वितीय हैं।
DateTime dateTimeParis = new DateTime(milliseconds).withZone(DateTimeZone.forID("Europe/Paris"));
प्रदर्शन के लिए, समय क्षेत्र को फिर से समायोजित करें।
DateTime dateTimeUtc = dateTimeParis.withZone(DateTimeZone.UTC);
DateTime dateTimeMontréal = dateTimeParis.withZone(DateTimeZone.forID("America/Montreal"));
कंसोल पर डंप करें। ध्यान दें कि मॉन्ट्रियल में तारीख अलग क्यों है, क्योंकि यूरोप में नया दिन शुरू हो गया है लेकिन अभी तक अमेरिका में नहीं है।
System.out.println("dateTimeParis: " + dateTimeParis);
System.out.println("dateTimeUTC: " + dateTimeUtc);
System.out.println("dateTimeMontréal: " + dateTimeMontréal);
रन करते समय।
dateTimeParis: 2008-09-01T02:00:00.000+02:00
dateTimeUTC: 2008-09-01T00:00:00.000Z
dateTimeMontréal: 2008-08-31T20:00:00.000-04:00
java.time
Joda समय के निर्माताओं ने हमसे कहा है अब उसके स्थान पर करने के लिए स्थानांतरित करने के लिए, java.time ढांचा जैसे ही सुविधाजनक है। जबकि जोडा-टाइम सक्रिय रूप से समर्थित है, सभी भावी विकास जावाटाइम कक्षाओं और उनके एक्सटेंशन को थ्रीटेन-अतिरिक्त परियोजना में किया जाएगा।
जावा-टाइम फ्रेमवर्क JSR 310 द्वारा परिभाषित किया गया है और जावा 8 और बाद में बनाया गया है। Java.time कक्षाओं को ThreeTen-Backport प्रोजेक्ट पर और ThreeTenABP प्रोजेक्ट में एंड्रॉइड के लिए जावा 6 & 7 पर वापस पोर्ट किया गया है।
एक Instant
UTC में टाइमलाइन पर नैनोसेकंड के संकल्प के साथ एक पल है। इसका युग यूटीसी में 1 9 70 का पहला पल है।
Instant instant = Instant.ofEpochSecond(1_220_227_200L);
एक offset-from-UTCZoneOffset
एक OffsetDateTime
प्राप्त करने के लिए लागू करें।
अभी तक बेहतर है, यदि ज्ञात है, तो ZonedDateTime
प्राप्त करने के लिए समय क्षेत्र ZoneId
लागू करें।
ZoneId zoneId = ZoneId.of("America/Montreal");
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId);
क्या आप बता सकते हैं कि आप किस मूल्य की अपेक्षा करते हैं? सेकेंड/मिलीसेकंड का सवाल मान्य हो सकता है, लेकिन 1220227200 1/1/1970 नहीं है।ऐसा लगता है कि आप कन्स्ट्रक्टर को 0 पास कर रहे हैं। कुछ और कोड मदद कर सकते हैं। – SJuan76
@mmmiki - आपको एक उत्तर – Stewart
स्वीकार करना चाहिए, यह जनवरी 15, 1 9 70 को लौटाता है, यहां 1 जनवरी नहीं। – njzk2