tl; डॉ
Instant.ofEpochMilli(170_798_400_000L)
1975-05-31T20: 00: 00Z
... और ...
Instant.ofEpochMilli(170_798_400_000L)
.atZone(ZoneId.of("Europe/Moscow"))
1975-05-31T23: 00 + 03: 00 [यूरोप/मास्को]
देखें live code।
java.time
आधुनिक दृष्टिकोण का उपयोग जावा 8 और बाद में java.time कक्षाओं का उपयोग करता है।
आप जावा में परेशान पुराने डेट-टाइम कक्षाओं का उपयोग कर रहे हैं जो अब विरासत हैं। स्ट्रिंग उत्पन्न करते समय वर्तमान डिफ़ॉल्ट समय क्षेत्र को लागू करने वाले Date::toString
विधि की उन वर्गों की कई समस्याओं में से एक इरादा लेकिन भ्रमित विशेषता थी। आंतरिक मूल्य वास्तव में हमेशा यूटीसी में होता है, लेकिन toString
भ्रम पैदा करता है कि Date
में समय क्षेत्र होता है जब वास्तव में यह नहीं होता है। यह आपके MSK
रहस्य बताता है।
[यहां तक कि अधिक भ्रमित, वास्तव में Date
में गहरा दफन एक समय क्षेत्र है लेकिन इस चर्चा के लिए अप्रासंगिक है। उन पुराने Date
/Calendar
कक्षाएं एक भयानक गड़बड़ हैं। सौभाग्य से जावा में अब किसी भी प्लेटफॉर्म पर सर्वश्रेष्ठ श्रेणी में डेट-टाइम फ्रेमवर्क है: java.time।]
स्पष्ट रूप से आपका इनपुट 1 9 70-01-01T00: 00: 00Z के यूनिक्स युग के बाद मिलीसेकंड की संख्या का प्रतिनिधित्व करता है।
Instant
कक्षा UTC में nanoseconds (दशमलव अंश के नौ (9) अंकों के संकल्प के साथ समयरेखा पर एक पल का प्रतिनिधित्व करती है)। यह वर्ग सीधे आपके इनपुट नंबर का विश्लेषण कर सकता है।
Instant instant = Instant.ofEpochMilli(170_798_400_000L) ;
instant.toString(): 1975-05-31T20: 00: 00Z
आप किसी विशेष क्षेत्र के wall-clock time के लेंस के माध्यम से है कि एक ही पल को देखने के लिए चाहते हैं, एक समय लागू क्षेत्र।ZonedDateTime
ऑब्जेक्ट प्राप्त करने के लिए ZoneId
लागू करें।
ZoneId z = ZoneId.of("Europe/Moscow") ;
ZonedDateTime zdt = instant.atZone(z) ;
1975-05-31T23: 00 + 03: 00 [यूरोप/मास्को]
JavaScript लाइब्रेरी गलत
JavaScript लाइब्रेरी है करने के लिए अपने कॉल के परिणाम है +04: 00 के ऑफसेट के साथ गलत है। According to Wikipedia, 1 9 30 से 1 9 81 तक मॉस्को का समय तीन घंटे आगे था, +03: 00। जावा.टाइम फ्रेमवर्क 1 9 75 के पूरे वर्ष +03: 00 के सही परिणाम उत्पन्न करता है। अधिक जानकारी के लिए Time in Russia देखें। चेतावनी: मैं रूस/सोवियत समय में विशेषज्ञ नहीं हूं।
java.time
बारे java.time ढांचे जावा 8 और बाद में बनाया गया है। ये कक्षाएं परेशान पुराने legacyjava.util.Date
, Calendar
, & SimpleDateFormat
जैसी समय-समय पर कक्षाएं प्रदान करती हैं।
Joda-Time प्रोजेक्ट, अब maintenance mode में, java.time कक्षाओं में माइग्रेशन की सलाह देता है।
और जानने के लिए, Oracle Tutorial देखें। और कई उदाहरणों और स्पष्टीकरणों के लिए स्टैक ओवरफ़्लो खोजें। विशिष्टता JSR 310 है।
जावा.टाइम कक्षाएं कहां प्राप्त करें?
ThreeTen-Extra परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के संभावित भविष्य के जोड़ों के लिए एक सिद्ध भूमि है। आपको यहां कुछ उपयोगी कक्षाएं मिल सकती हैं जैसे Interval
, YearWeek
, YearQuarter
, और more।
शायद "टाइम ज़ोन चेंज" के साथ इसका कुछ संबंध है: http://en.wikipedia.org/wiki/Moscow_Time –
यह निश्चित रूप से है। क्या इसका मतलब है कि दिनांक निर्माता का जावास्क्रिप्ट में अब उपयोग नहीं किया जा सकता है? – ike3
ठीक है, अगर उनमें से कोई सही जवाब दे रहा है, लेकिन दूसरा नहीं, तो मैं कहूंगा कि दूसरे में एक बग है :-) क्या जावा सही है या जावास्क्रिप्ट है? मैं जावा संस्करण को सही उत्तर देने की अपेक्षा करता हूं, लेकिन यह सिर्फ एक संदेह है। – Pointy