tl; ডা
String sql = "SELECT CURRENT_TIMESTAMP ;
…
OffsetDateTime odt = myResultSet.getObject( 1 , OffsetDateTime.class ) ;
ডিফল্ট সময় অঞ্চলের জন্য হোস্ট ওএস বা জেভিএম এর উপর নির্ভর করে এড়িয়ে চলুন
কাঙ্ক্ষিত / প্রত্যাশিত সময় অঞ্চলটি সুস্পষ্টভাবে বর্ণনা করার জন্য আমি আপনাকে সমস্ত কোড লিখার পরামর্শ দিচ্ছি। আপনার জেভিএমের বর্তমান ডিফল্ট টাইম জোনের উপর নির্ভর করতে হবে না। এবং যে জেভিএম বর্তমান ডিফল্ট সময় জোন পরিবর্তন করতে পারেন সচেতন হতে কোনো মুহূর্তে রানটাইম সময়, কোন কোড সহ যেকোনো অ্যাপ্লিকেশান কলিং কোন থ্রেড TimeZone.setDefault। এই জাতীয় কলটি তত্ক্ষণাত্ সেই জেভিএমের মধ্যে থাকা সমস্ত অ্যাপকে প্রভাবিত করে।
java.time
অন্যান্য উত্তরগুলির মধ্যে কিছু সঠিক ছিল, তবে এখন এটি তৈরি হয়েছে। জাভার প্রাথমিক সংস্করণগুলির সাথে বান্ডিল করা ভয়ানক তারিখ-কালীন ক্লাসগুলি ত্রুটিযুক্ত ছিল, এমন লোকেরা লিখেছিলেন যারা তারিখ-সময় পরিচালনার জটিলতা এবং সূক্ষ্মতাগুলি বুঝতে পারে না।
জেএসআর 310-এ সংজ্ঞায়িত জাভা.টাইম ক্লাস দ্বারা উত্তরাধিকারের তারিখ-সময় ক্লাসগুলি পরিপূর্ণ করা হয়েছে ।
একটি সময় অঞ্চল উপস্থাপন করতে, ব্যবহার করুন ZoneId। ইউটিসি থেকে অফসেট উপস্থাপন করতে, ব্যবহার করুন ZoneOffset। একটি অফসেট কেবল প্রধান মেরিডিয়ান এর পিছনে বা পিছনে বেশ কয়েকটি ঘন্টা-মিনিট-সেকেন্ড। একটি সময় অঞ্চল অনেক বেশি। একটি সময় অঞ্চল হ'ল একটি বিশেষ অঞ্চলের লোকদের দ্বারা ব্যবহৃত অফসেটের অতীত, বর্তমান এবং ভবিষ্যতের পরিবর্তনের ইতিহাস।
GMT / UTC- এ যে কোনও সময় সম্পর্কিত ক্রিয়াকলাপ জোর করা দরকার
শূন্য ঘন্টা-মিনিট-সেকেন্ডের অফসেটের জন্য, ধ্রুবকটি ব্যবহার করুন ZoneOffset.UTC।
Instant
ইউটিসিতে বর্তমান মুহুর্তটি ক্যাপচার করতে, একটি ব্যবহার করুন Instant। এই শ্রেণিটি ইউটিসিতে একটি মুহুর্তের প্রতিনিধিত্ব করে, সর্বদা সংজ্ঞা অনুসারে ইউটিসিতে।
Instant instant = Instant.now() ;
ZonedDateTime
নির্দিষ্ট অঞ্চলের লোকেরা ব্যবহৃত প্রাচীর-ঘড়ির সময় একই মুহূর্তটি দেখতে, একটি সময় অঞ্চলে সামঞ্জস্য করুন। একই মুহূর্ত, সময়রেখার একই পয়েন্ট, বিভিন্ন প্রাচীর-ঘড়ির সময়।
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
তথ্যশালা
আপনি একটি ডাটাবেস উল্লেখ।
ডাটাবেস থেকে একটি মুহূর্ত পুনরুদ্ধার করতে, আপনার কলামটি এসকিউএল-স্ট্যান্ডার্ডের মতো ডেটা টাইপের হওয়া উচিত TIMESTAMP WITH TIME ZONE। স্ট্রিংয়ের পরিবর্তে কোনও বস্তু পুনরুদ্ধার করুন। জেডিবিসি ৪.২ এবং তারপরে , আমরা জাভা.টাইম অবজেক্টগুলি ডাটাবেসের সাথে বিনিময় করতে পারি । OffsetDateTime, JDBC এর দ্বারা প্রয়োজন বোধ করা হয় যখন Instant& ZonedDateTimeঐচ্ছিক।
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
বেশিরভাগ ডাটাবেস এবং ড্রাইভারগুলিতে, আমি অনুমান করব যে ইউটিসিতে দেখা হিসাবে আপনি মুহূর্তটি পাবেন। তবে যদি তা না হয় তবে আপনি দুটি উপায়ের সাথে সামঞ্জস্য করতে পারেন:
- এক্সট্র্যাক্ট একটি
Instant: odt.toInstant()
- প্রদত্ত অফসেট থেকে শূন্যের অফসেটে সামঞ্জস্য করুন: অফসেটডেটটাইম odtUtc = odt.withOffsetSameInstant (জোনঅফসেট.আউটসি); ``

জাভা.টাইম সম্পর্কে
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.DateCalendarSimpleDateFormat
আরও জানতে, ওরাকল টিউটোরিয়াল দেখুন । এবং অনেকগুলি উদাহরণ এবং ব্যাখ্যাগুলির জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?