TL; ড
Java.util.Date কে java.sql.Date এ রূপান্তর করবেন?
না।উভয় শ্রেণিই নকশাকৃত।
- ব্যবহার করুন java.time উত্তরাধিকার পরিবর্তে শ্রেণীর
java.util.Date
& java.sql.Date
JDBC এর 4.2 বা পরবর্তী সঙ্গে।
- কোড সহ ইন্টার-অপারেটিং এখনও জাভা.টাইমে আপডেট না হলে জাভা.টাইমে / থেকে রূপান্তর করুন।
সঙ্গে উদাহরণ ক্যোয়ারী PreparedStatement
।
myPreparedStatement.setObject(
… , // Specify the ordinal number of which argument in SQL statement.
myJavaUtilDate.toInstant() // Convert from legacy class `java.util.Date` (a moment in UTC) to a modern `java.time.Instant` (a moment in UTC).
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Adjust from UTC to a particular time zone, to determine a date. Instantiating a `ZonedDateTime`.
.toLocalDate() // Extract a date-only `java.time.LocalDate` object from the date-time `ZonedDateTime` object.
)
প্রতিস্থাপন:
Instant
java.util.Date
উভয়ের পরিবর্তে ইউটিসিতে একটি মুহুর্ত উপস্থাপন করে। তবে এখন মিলিসেকেন্ডের পরিবর্তে ন্যানোসেকেন্ডের সাথে।
LocalDate
java.sql.Date
উভয়ের পরিবর্তে দিনের সময় ছাড়া এবং সময় অঞ্চল ব্যতীত কেবলমাত্র তারিখের মান উপস্থাপন করে।
বিস্তারিত
আপনি যদি কেবলমাত্র তারিখের মানগুলি নিয়ে কাজ করার চেষ্টা করছেন (দিনের কোনও সময় নয়, সময় অঞ্চল নয়), LocalDate
বরং ক্লাসটি ব্যবহার করুন java.util.Date
।
java.time
জাভা 8 এবং তার পরে, জাভা এর প্রাথমিক সংস্করণগুলির সাথে বান্ডিলযুক্ত সমস্যাযুক্ত পুরানো তারিখ-কালীন ক্লাসগুলি নতুন জাভা.টাইম প্যাকেজ দ্বারা পরিবেশন করা হয়েছে । ওরাকল টিউটোরিয়াল দেখুন । কার্যকারিতাটির বেশিরভাগটি থ্রিটেন-ব্যাকপোর্টে জাভা 6 এবং 7 এ ব্যাক-পোর্ট করা হয়েছে এবং আরও থ্রিডেএনএবিপিতে অ্যান্ড্রয়েডের সাথে মানিয়ে নেওয়া হয়েছে ।
একটি এসকিউএল ডেটা টাইপটি DATE
কেবলমাত্র তারিখ হতে বোঝায়, দিনের কোনও সময় এবং সময় অঞ্চল নেই। জাভা java.time.LocalDate
8- অবধি জাভা পর্যন্ত কখনই এ জাতীয় ক্লাস করেনি, আসুন একটি নির্দিষ্ট সময় অঞ্চল অনুসারে আজকের তারিখ পেয়ে এমন মান তৈরি করুন (মন্ট্রিয়ালের চেয়ে প্যারিসে আগের দিন ডোনস হিসাবে একটি তারিখ নির্ধারণে সময় অঞ্চল গুরুত্বপূর্ণ), উদাহরণস্বরূপ)।
LocalDate todayLocalDate = LocalDate.now( ZoneId.of( "America/Montreal" ) ); // Use proper "continent/region" time zone names; never use 3-4 letter codes like "EST" or "IST".
এই মুহুর্তে, আমরা সম্পন্ন হতে পারে। আপনার যদি JDBC ড্রাইভার মেনে JDBC এর 4.2 বৈশিষ্ট , আপনি একটি পাস করতে সক্ষম হওয়া উচিত LocalDate
মাধ্যমে setObject
একটি উপর PreparedStatement
একটি এসকিউএল DATE তারিখে ক্ষেত্রের মধ্যে দোকান থেকে।
myPreparedStatement.setObject( 1 , localDate );
একইভাবে, ResultSet::getObject
একটি এসকিউএল তারিখ কলাম থেকে জাভা LocalDate
অবজেক্টে আনতে ব্যবহার করুন । দ্বিতীয় যুক্তিতে শ্রেণি নির্দিষ্ট করা আপনার কোডকে টাইপ-নিরাপদ করে তোলে ।
LocalDate localDate = ResultSet.getObject( 1 , LocalDate.class );
অন্য কথায়, এই পুরো প্রশ্নটি জেডিবিসি ৪.২ বা তার পরেও অপ্রাসঙ্গিক ।
আপনার জেডিবিসি ড্রাইভার যদি এই পদ্ধতিতে না সম্পাদন করে তবে আপনাকে java.sql ধরণের রূপান্তর করতে ফিরে যেতে হবে back
Java.sql.Date এ রূপান্তর করুন
রূপান্তর করতে, পুরানো তারিখের সময় ক্লাসে যুক্ত নতুন পদ্ধতি ব্যবহার করুন। আমরা java.sql.Date.valueOf(…)
রূপান্তর করতে কল করতে পারি LocalDate
।
java.sql.Date sqlDate = java.sql.Date.valueOf( todayLocalDate );
এবং অন্য দিকে যাচ্ছে।
LocalDate localDate = sqlDate.toLocalDate();
থেকে রূপান্তর করা হচ্ছে java.util.Date
আপনার যদি পুরানো তারিখের সময় ক্লাসগুলি ব্যবহার করা এড়ানো উচিত তবে আপনি বিদ্যমান কোড সহ কাজ করার সময় বাধ্য হতে পারেন। যদি তা হয় তবে আপনি জাভা.টাইমে / থেকে রূপান্তর করতে পারেন।
Instant
শ্রেণীর মধ্য দিয়ে যান , যা ইউটিসিতে সময়রেখার জন্য একটি মুহুর্তের প্রতিনিধিত্ব করে। একটি Instant
ধারণা হিসাবে একই java.util.Date
। তবে নোট করুন যে Instant
এর ন্যানোসেকেন্ড পর্যন্ত রেজোলিউশন java.util.Date
রয়েছে যখন কেবল মিলিসেকেন্ড রয়েছে রেজোলিউশন রয়েছে।
রূপান্তর করতে, পুরানো শ্রেণিতে যুক্ত নতুন পদ্ধতি ব্যবহার করুন। উদাহরণস্বরূপ, java.util.Date.from( Instant )
এবং java.util.Date::toInstant
।
Instant instant = myUtilDate.toInstant();
একটি তারিখ নির্ধারণ করতে, আমাদের একটি সময় অঞ্চলের প্রসঙ্গের প্রয়োজন। যে কোনও মুহুর্তের জন্য, সময় অঞ্চল অনুসারে তারিখটি বিশ্ব জুড়ে পরিবর্তিত হয়। একটি ZoneId
পেতে একটি প্রয়োগ করুন ZonedDateTime
।
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
LocalDate localDate = zdt.toLocalDate();
Ava java.sql.Date ক্লাস কেবল দিনের সময় ব্যতীত তারিখ হওয়ার ভান করে তবে বাস্তবে দিনের একটি সময় করে , মধ্যরাতের সময়কে সামঞ্জস্য করে। বিভ্রান্তিকর? হ্যাঁ, পুরানো তারিখের সময় ক্লাসগুলি একটি গোলযোগ।
জাভা.টাইম সম্পর্কে
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই শ্রেণীর বিরক্তিজনক পুরাতন স্থানচ্যুত উত্তরাধিকার যেমন তারিখ-সময় শ্রেণীর java.util.Date
, Calendar
, &SimpleDateFormat
।
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval
, YearWeek
, YearQuarter
, এবং আরো ।