TL; ড
Joda-টাইম প্রকল্পের রক্ষণাবেক্ষণ-মোড, এখন দ্বারা supplanted হয় java.time ক্লাস।
- শুধু
java.time.Instant ক্লাস ব্যবহার করুন ।
- প্রয়োজন নেই:
LocalDateTime
java.sql.Timestamp
- স্ট্রিংস
ইউটিসিতে বর্তমান মুহুর্তটি ক্যাপচার করুন।
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-টাইম , একটি LocalDateTimeইচ্ছাপূর্বক সময় অঞ্চল কোন ধারণা বা অভাব আছে অফসেট-থেকে-ইউটিসি। যেমনটি, এটি কোনও মুহুর্তের প্রতিনিধিত্ব করে না এবং সময়রেখার কোনও বিষয় নয় । এ প্রায় 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 ) ;
আপনি যদি দিনের প্রথম মুহূর্তটিকে আপনার সময়ের সময়ের হিসাবে চান তবে জাভা.টাইম সেই মুহুর্তটি নির্ধারণ করুন। অনুমান করবেন না যে দিনটি শুরু হয় 00:00:00 এ। ডাইটলাইট সেভিং টাইম (ডিএসটি) এর মতো অসঙ্গতিগুলির অর্থ দিনটি অন্য সময় যেমন 01:00:00 এর আগে শুরু হতে পারে।
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
java.sql.Timestamp ভুল বর্গ হয়
java.sql.Timestampবিরক্তিজনক পুরাতন তারিখ-সময় শ্রেণীর যে এখন উত্তরাধিকার হয়, দ্বারা সম্পূর্ণরূপে supplanted অংশ java.time ক্লাস। সেই শ্রেণিটি ইউটিসিতে ন্যানোসেকেন্ডগুলির রেজোলিউশন সহ একটি মুহুর্তের প্রতিনিধিত্ব করতে ব্যবহৃত হয়েছিল । সেই উদ্দেশ্যটি এখনই পরিবেশন করা হয়েছে java.time.Instant।
জেডিবিসি ৪.২ সহ getObject/setObject
এর মতো JDBC এর 4.2 এবং পরে, আপনার JDBC ড্রাইভার সরাসরি বিনিময় করতে পারেন java.time কল করে ডাটাবেসের অবজেক্টের:
উদাহরণ স্বরূপ:
myPreparedStatement.setObject( … , instant ) ;
… এবং …
Instant instant = myResultSet.getObject( … , Instant.class ) ;
উত্তরাধিকার রূপান্তর ⬌ আধুনিক
আপনার যদি অবশ্যই পুরানো কোড সহ জাভা.টাইমে আপডেট না হয়ে ইন্টারফেস করতে হয় তবে পুরানো ক্লাসগুলিতে যুক্ত নতুন পদ্ধতি ব্যবহার করে পিছনে রূপান্তর করুন।
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.DateCalendarSimpleDateFormat
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেকগুলি উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval, YearWeek, YearQuarter, এবং আরো ।
java.sql.Timestampক্লাসটি এখন উত্তরাধিকার, জাভা.টাইম ক্লাসগুলি দ্বারা বিশেষত দ্বারা সরবরাহ করাInstant।