java.time
आधुनिक दृष्टिकोण java.time वर्गों है कि जावा के जल्द से जल्द संस्करणों के साथ बंडल परेशानी विरासत तिथि-समय वर्गों का स्थान ले लिया उपयोग करता है।
java.sql.Timestamp
कक्षा उन विरासत कक्षाओं में से एक है। अब जरूरत नहीं। इसके बजाय जेडीबीसी 4.2 और बाद में अपने डेटाबेस के साथ सीधे Instant
या अन्य जावा.टाइम कक्षाओं का उपयोग करें।
Instant
कक्षा UTC में nanoseconds (दशमलव अंश के नौ (9) अंकों के संकल्प के साथ समयरेखा पर एक पल का प्रतिनिधित्व करती है)।
Instant instant = myResultSet.getObject(… , Instant.class) ;
यदि आप किसी मौजूदा Timestamp
साथ interoperate करना आवश्यक है, तुरंत java.time में तब्दील वर्ष कक्षाओं में जोड़े गए नए रूपांतरण विधियों के माध्यम से।
Instant instant = myTimestamp.toInstant() ;
किसी अन्य समय क्षेत्र में समायोजित करने के लिए, एक ZoneId
वस्तु के रूप में समय क्षेत्र निर्दिष्ट करें। continent/region
के प्रारूप में निर्दिष्ट करें, जैसे America/Montreal
, Africa/Casablanca
, या Pacific/Auckland
। 0-या IST
जैसे 3-4 अक्षर छद्म-जोन का उपयोग न करें क्योंकि सही समय क्षेत्र, मानकीकृत नहीं, और यहां तक कि अनूठा (!) भी नहीं है।
ZoneId z = ZoneId.of("America/Montreal") ;
Instant
के लिए आवेदन करें एक ZonedDateTime
वस्तु के उत्पादन के लिए।
ZonedDateTime zdt = instant.atZone(z) ;
उपयोगकर्ता के लिए प्रदर्शन के लिए एक स्ट्रिंग उत्पन्न करने के लिए कई चर्चाओं और उदाहरण खोजने के लिए DateTimeFormatter
के लिए खोज स्टैक ओवरफ़्लो।
आपका प्रश्न वास्तव में दूसरी दिशा में जाने के बारे में है, उपयोगकर्ता डेटा प्रविष्टि से डेट-टाइम ऑब्जेक्ट्स तक। आमतौर पर अपने डेटा-एंट्री को दो हिस्सों, एक तिथि और समय-समय पर तोड़ने के लिए सबसे अच्छा है।
LocalDate ld = LocalDate.parse(dateInput , DateTimeFormatter.ofPattern("M/d/uuuu" , Locale.US)) ;
LocalTime lt = LocalTime.parse(timeInput , DateTimeFormatter.ofPattern("H:m a" , Locale.US)) ;
आपका प्रश्न स्पष्ट नहीं है। क्या आप उपयोगकर्ता द्वारा यूटीसी में होने वाली तारीख और समय की व्याख्या करना चाहते हैं? या किसी अन्य समय क्षेत्र में?
यदि आप यूटीसी का मतलब रखते हैं, तो यूटीसी, ZoneOffset.UTC
के लिए निरंतर उपयोग करके ऑफ़सेट के साथ OffsetDateTime
बनाएं।
OffsetDateTime odt = OffsetDateTime.of(ld , lt , ZoneOffset.UTC) ;
यदि आप किसी अन्य समय क्षेत्र का मतलब है, एक समय क्षेत्र वस्तु के साथ गठबंधन, एक ZoneId
। लेकिन कौन सा समय क्षेत्र? आप एक डिफ़ॉल्ट समय क्षेत्र का पता लगा सकते हैं। या, यदि महत्वपूर्ण हो, तो आपको उपयोगकर्ता के इरादे से निश्चित होने के लिए पुष्टि करनी होगी।
ZonedDateTime zdt = ZonedDateTime.of(ld , lt , z) ;
एक सरल ऑब्जेक्ट परिभाषा से यूटीसी में हमेशा होता है कि प्राप्त करने के लिए, एक Instant
निकालें।
Instant instant = odt.toInstant() ;
... या ...
Instant instant = zdt.toInstant() ;
अपने डेटाबेस को भेजें।
myPreparedStatement.setObject(… , instant) ;
java.time
बारे java.time ढांचे जावा 8 और बाद में बनाया गया है। ये कक्षाएं परेशान पुराने legacy दिनांक-समय कक्षाएं जैसे java.util.Date
, Calendar
, & SimpleDateFormat
प्रदान करती हैं।
Joda-Time प्रोजेक्ट, अब maintenance mode में, java.time कक्षाओं में माइग्रेशन की सलाह देता है।
और जानने के लिए, Oracle Tutorial देखें। और कई उदाहरणों और स्पष्टीकरणों के लिए स्टैक ओवरफ़्लो खोजें। विशिष्टता JSR 310 है।
जावा.टाइम कक्षाएं कहां प्राप्त करें?
ThreeTen-Extra परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के संभावित भविष्य के जोड़ों के लिए एक सिद्ध भूमि है। आपको यहां कुछ उपयोगी कक्षाएं मिल सकती हैं जैसे Interval
, YearWeek
, YearQuarter
, और more।
आप केवल टाइमज़ोन क्यों बदल रहे हैं और इसके साथ दिनांक/समय को परिवर्तित नहीं कर रहे हैं? –
यह एक वास्तविक समय है जो जावा टाइम लेने के लिए एक टाइमज़ोन में है, और * उस * दिनांक को किसी अन्य टाइमज़ोन में प्राप्त करें। आईई, 5 पीएम ईडीटी लें और 5 पीएम पीडीटी प्राप्त करें। – mtyson