tl; डॉ
Joda समय परियोजना रखरखाव मोड, अब तक का स्थान ले लिया है java.time कक्षाएं।
- बस
java.time.Instant
कक्षा का उपयोग करें ।
- की कोई ज़रूरत नहीं:
LocalDateTime
java.sql.Timestamp
- स्ट्रिंग्स
UTC में वर्तमान क्षण कैप्चर करें।
Instant.now()
डेटाबेस में उस पल को स्टोर करने के लिए:
myPreparedStatement.setObject( … , Instant.now() ) // Writes an `Instant` to database.
डेटाबेस से उस पल को पुनः प्राप्त करने के लिए:
myResultSet.getObject( … , Instant.class ) // Instantiates a `Instant`
किसी विशेष समय क्षेत्र की दीवार-घड़ी के समय को समायोजित करने के लिए।
instant.atZone( z ) // Instantiates a `ZonedDateTime`
LocalDateTime
गलत वर्ग है
अन्य उत्तर सही हैं, लेकिन वे यह इंगित करने में विफल रहते हैं कि LocalDateTime
आपके उद्देश्य के लिए गलत वर्ग है।
Java.time और Joda-Time दोनों में , LocalDateTime
जानबूझकर समय क्षेत्र या ऑफसेट- UTC की किसी भी अवधारणा का अभाव है। जैसे, यह एक पल का प्रतिनिधित्व नहीं करता है, और समयरेखा पर एक बिंदु नहीं है। ए लगभग 26-27 घंटे की सीमा के साथ संभावित क्षणों के LocalDateTime
बारे में एक मोटे विचार का प्रतिनिधित्व करता है ।
एक का उपयोग करें LocalDateTime
के लिए या तो क्षेत्र / ऑफसेट अज्ञात है (नहीं एक अच्छा स्थिति), या जब क्षेत्र ऑफसेट अनिश्चित है जब। उदाहरण के लिए, "क्रिसमस 25 दिसंबर, 2018 के पहले क्षण से शुरू होता है" का प्रतिनिधित्व एक के रूप में किया जाएगा LocalDateTime
।
ZonedDateTime
किसी विशेष समय क्षेत्र में एक पल का प्रतिनिधित्व करने के लिए एक का उपयोग करें । उदाहरण के लिए, क्रिसमस किसी विशेष क्षेत्र में शुरू होता है जैसे कि किसी वस्तु के साथ Pacific/Auckland
या America/Montreal
उसका प्रतिनिधित्व किया जाएगा ZonedDateTime
।
हमेशा यूटीसी में एक पल के लिए, उपयोग करें Instant
।
Instant instant = Instant.now() ; // Capture the current moment in UTC.
एक समय क्षेत्र लागू करें। एक ही पल, समय पर एक ही बिंदु, लेकिन एक अलग दीवार घड़ी समय के साथ देखा।
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; // Same moment, different wall-clock time.
इसलिए, अगर मैं केवल लोकलडेट और लोकलडेट टाइम के बीच परिवर्तित कर सकता हूं,
नहीं, गलत रणनीति। यदि आपके पास कोई दिनांक-केवल मान है, और आप दिनांक-समय मान चाहते हैं, तो आपको एक दिन का समय निर्दिष्ट करना होगा। उस समय का दिन किसी विशेष क्षेत्र के लिए उस तिथि पर मान्य नहीं हो सकता है - जिस स्थिति ZonedDateTime
में जरूरत पड़ने पर दिन का समय स्वचालित रूप से समायोजित हो जाता है।
LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;
LocalTime lt = LocalTime.of( 14 , 0 ) ; // 14:00 = 2 PM.
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
यदि आप दिन का पहला क्षण अपने दिन के रूप में चाहते हैं, तो java.time को उस क्षण को निर्धारित करने दें । मान लीजिए दिन 00:00:00 पर शुरू होता है। डेलाइट सेविंग टाइम (DST) जैसे विसंगतियों का मतलब है कि दिन की शुरुआत किसी अन्य समय जैसे 01:00:00 बजे हो सकती है।
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
java.sql.Timestamp
गलत वर्ग है
java.sql.Timestamp
परेशानी पुराने समय की कक्षाओं का एक हिस्सा है जो अब विरासत है, पूरी तरह से java.time कक्षाओं द्वारा समर्थित है । उस वर्ग का उपयोग यूटीसी में एक क्षण का प्रतिनिधित्व करने के लिए नैनोसेकंड के एक संकल्प के साथ किया गया था । इस उद्देश्य के साथ अब सेवा की जाती है java.time.Instant
।
JDBC 4.2 के साथ getObject
/setObject
के रूप में JDBC 4.2 और बाद में, अपने JDBC ड्राइवर सीधे विनिमय कर सकते हैं java.time फोन करके डेटाबेस के साथ वस्तुओं:
उदाहरण के लिए:
myPreparedStatement.setObject( … , instant ) ;
… तथा …
Instant instant = myResultSet.getObject( … , Instant.class ) ;
कन्वर्ट विरासत leg आधुनिक
यदि आपको पुराने कोड के साथ इंटरफ़ेस करना चाहिए जो अभी तक java.time में अपडेट नहीं किया गया है , तो पुरानी कक्षाओं में जोड़े गए नए तरीकों का उपयोग करके आगे और पीछे कन्वर्ट करें।
Instant instant = myJavaSqlTimestamp.toInstant() ; // Going from legacy class to modern class.
…तथा…
java.sql.Timestamp myJavaSqlTimestamp = java.sql.Timestamp.from( instant ) ; // Going from modern class to legacy class.
जावा के बारे में
Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date
, Calendar
, और SimpleDateFormat
।
Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।
अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है ।
आप अपने डेटाबेस से सीधे java.time वस्तुओं का आदान-प्रदान कर सकते हैं । JDBC 4.2 या उसके बाद के JDBC ड्राइवर का अनुपालन करें । तारों की कोई जरूरत नहीं, कक्षाओं की कोई जरूरत नहीं ।java.sql.*
Java.time कक्षाएं कहाँ से प्राप्त करें?
ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के संभावित भविष्य के परिवर्धन के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval
, YearWeek
, YearQuarter
, और अधिक ।
java.sql.Timestamp
वर्ग अब विरासत है, java.time कक्षाओं द्वारा विशेष रूप से द्वारा supplanted हैInstant
।