गलत प्रकार
LocalDateTime
यहाँ गलत प्रकार है। जैसा कि इसके जावाडोक में बताया गया है, वह वर्ग एक पल का प्रतिनिधित्व नहीं कर सकता है।
उस वर्ग में जानबूझकर समय क्षेत्र या ऑफसेट-से-यूटीसी की कोई अवधारणा नहीं है। तो यह एक तारीख और दिन के समय का प्रतिनिधित्व करता है जैसे "23 जनवरी 2019 को दोपहर", लेकिन यह नहीं पता कि क्या वह टोक्यो, पेरिस या मॉन्ट्रियल में दोपहर है, उदाहरण के लिए, तीन बहुत अलग क्षण कई घंटे अलग हैं। तो यह प्रकार मानक SQL प्रकार के लिए उपयुक्त है TIMESTAMP WITHOUT TIME ZONE
- बिना , नहीं साथ ।
अधिक चर्चा के लिए, देखें:Instant और LocalDateTime में क्या अंतर है?
सही प्रकार
मानक SQL प्रकार के लिए TIMESTAMP WITH TIME ZONE
, आपको जावा प्रकारों का उपयोग करना चाहिए Instant
, OffsetDateTime
, या ZonedDateTime
. उन तीनों में से, JDBC 4.2 को केवल दूसरे के लिए समर्थन की आवश्यकता है, OffsetDateTime
.
पुनर्प्राप्ति।
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Postgres से प्राप्त मान हमेशा UTC में रहेगा। SQL मानक इस व्यवहार को निर्दिष्ट नहीं करता है, इसलिए डेटाबेस भिन्न होते हैं। Postgres में TIMESTAMP WITH TIME ZONE
प्रकार के फ़ील्ड को भेजा गया कोई भी मान यूटीसी में समायोजित किया गया है। पुनर्प्राप्त मान यूटीसी में हैं।
भंडारण।
myPreparedStatement.setObject( … , odt ) ;
यूटीसी (शून्य की ऑफसेट) से किसी विशेष क्षेत्र (एक समय क्षेत्र) के लोगों द्वारा उपयोग किए जाने वाले दीवार-घड़ी के समय में समायोजित करें।
ZoneId z = ZoneId.of( "Asia/Tokyo" ;
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;
जेपीए
मैं जेपीए का उपयोग नहीं करता, चीजों को सरल रखना पसंद करता हूं।
लेकिन इस उत्तर के अनुसार , जेपीए 2.2 java.time . का समर्थन करता है प्रकार।
हाइबरनेट java.time . का भी समर्थन करता है .