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.Date
Calendar
SimpleDateFormat
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেকগুলি উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval
, YearWeek
, YearQuarter
, এবং আরো ।
java.sql.Timestamp
ক্লাসটি এখন উত্তরাধিকার, জাভা.টাইম ক্লাসগুলি দ্বারা বিশেষত দ্বারা সরবরাহ করাInstant
।