23/09/2007 তারিখের সাথে আমি কীভাবে একটি টাইমস্ট্যাম্প তৈরি করতে পারি?
উত্তর:
দ্বারা Timestamp
, আমি আপনার মানে মানে java.sql.Timestamp
। আপনি লক্ষ্য করবেন যে এই শ্রেণীর একটি নির্মাতা রয়েছে যা একটি long
যুক্তি গ্রহণ করে accep আপনি DateFormat
ক্লাসটি ব্যবহার করে এটি পার্স করতে পারেন :
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
java.util.Date
, java.util.Calendar
এবং java.text.SimpleDateFormat
এখন উত্তরাধিকার দ্বারা supplanted java.time জাভা 8 এবং পরে পাতাটা ক্লাস। ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
এই সম্পর্কে কি?
java.sql.Timestamp timestamp = java.sql.Timestamp.valueOf("2007-09-23 10:10:10.0");
টাইমস্ট্যাম্প বলতে কী বোঝ? আপনি যদি ইউনিক্স পর্বের সময় থেকে মিলিসেকেন্ডগুলি বোঝাতে চান:
GregorianCalendar cal = new GregorianCalendar(2007, 9 - 1, 23);
long millis = cal.getTimeInMillis();
আপনি যদি সত্যিকারের java.sql.Timestamp অবজেক্টটি চান:
Timestamp ts = new Timestamp(millis);
Calendar.SEPTEMBER
java.sql.Timestamp.from (
LocalDate.of ( 2007 , 9 , 23 )
.atStartOfDay( ZoneId.of ( "America/Montreal" ) )
.toInstant()
)
আসুন জাভা 8 এবং তার পরে নির্মিত জাভা.টাইম ফ্রেমওয়ার্ক ব্যবহার করে কোডটি দেখিয়ে এই পৃষ্ঠাটি আপডেট করুন ।
এই নতুন ক্লাসগুলি জোডা-টাইম দ্বারা অনুপ্রাণিত হয়েছে , জেএসআর 310 দ্বারা সংজ্ঞায়িত হয়েছে এবং থ্রিটেন-এক্সট্রা প্রকল্প দ্বারা বর্ধিত হয়েছে । তারা জাভার প্রাথমিক সংস্করণগুলির সাথে বান্ডিল করা কুখ্যাত সমস্যাযুক্ত পুরানো তারিখের সময় ক্লাসগুলিকে সাপ্লান্ট করে।
জাভা.টাইমে, Instant
ইউটিসিতে সময়রেখার একটি মুহুর্ত। এ ZonedDateTime
হ'ল একটি তাত্ক্ষণিক সময় অঞ্চল ( ZoneId
) এ সামঞ্জস্য ।
সময় অঞ্চল এখানে গুরুত্বপূর্ণ। একটি তারিখ September 23, 2007
সময় অঞ্চল প্রয়োগ না করে টাইমলাইনে একটি মুহুর্তে অনুবাদ করা যায় না। বিবেচনা করুন যে মন্ট্রিয়ালের তুলনায় একটি নতুন দিন প্যারিসে প্রথম দিকে উদিত হয়েছিল যেখানে এখনও এটি "গতকাল" রয়েছে।
এছাড়াও, একটি java.sql.Timestamp উভয় তারিখ এবং দিনের সময় উভয় উপস্থাপন করে। সুতরাং আমাদের অবশ্যই তারিখটি বজায় রাখতে একটি সময়কালীন ইনজেকশন করতে হবে। আমরা ধরে নিই যে আপনি দিনের প্রথম মুহূর্তটি দিনের সময় হিসাবে চান। নোট করুন যে 00:00:00.0
ডাইটলাইট সেভিং টাইম এবং সম্ভবত অন্যান্য অসঙ্গতির কারণে এটি সর্বদা সময় নয় ।
নোট করুন যে পুরানো java.util.Date ক্লাসের বিপরীতে এবং জোদা-টাইমের বিপরীতে, জাভা.টাইম টাইপগুলির মিলি সেকেন্ডের চেয়ে ন্যানোসেকেন্ডগুলির রেজোলিউশন রয়েছে। এটি java.sql.Timestamp এর রেজোলিউশনের সাথে মেলে।
নোট করুন যে java.sql.Timestamp এর toString
পদ্ধতিটির মাধ্যমে স্ট্রিং প্রতিনিধিত্ব করার সময় আপনার JVM- র বর্তমান ডিফল্ট সময় অঞ্চলটিকে তার তারিখ-সময় মানকে স্পষ্টভাবে প্রয়োগ করার একটি অভ্যাসযুক্ত অভ্যাস রয়েছে । এখানে আপনি আমার America/Los_Angeles
সময় অঞ্চল প্রয়োগ আছে দেখুন। বিপরীতে, জাভা.টাইম ক্লাসগুলি বেশি বুদ্ধিমান, স্ট্যান্ডার্ড আইএসও 8601 ফর্ম্যাট ব্যবহার করে।
LocalDate d = LocalDate.of ( 2007 , 9 , 23 ) ;
ZoneId z = ZoneId.of ( "America/Montreal" ) ;
ZonedDateTime zdt = d.atStartOfDay( z ) ;
Instant instant = zdt.toInstant() ;
java.sql.Timestamp ts = java.sql.Timestamp.from ( instant ) ;
কনসোল করতে ডাম্প।
System.out.println ( "d: " + d + " = zdt: " + zdt + " = instant: " + instant + " = ts: " + ts );
যখন রান।
d: 2007-09-23 = zdt: 2007-09-23T00: 00-04: 00 [আমেরিকা / মন্ট্রিল] = তাত্ক্ষণিক: 2007-09-23T04: 00: 00Z = টিএস: 2007-09-22 21:00: 00.0
যাইহোক, জেডিবিসি ৪.২ হিসাবে, আপনি java.Time প্রকারগুলি সরাসরি ব্যবহার করতে পারেন। দরকার নেই java.sql.Timestamp
।
PreparedStatement.setObject
ResultSet.getObject
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.Date
Calendar
SimpleDateFormat
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়াল দেখুন । এবং অনেকগুলি উদাহরণ এবং ব্যাখ্যাগুলির জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval
, YearWeek
, YearQuarter
, এবং আরো ।
আপনি নিম্নলিখিতগুলি করতে পারেন:
// untested
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 23);// I might have the wrong Calendar constant...
cal.set(Calendar.MONTH, 8);// -1 as month is zero-based
cal.set(Calendar.YEAR, 2009);
Timestamp tstamp = new Timestamp(cal.getTimeInMillis());
এপিআই অনুসারে কনস্ট্রাক্টর যা বছর, মাস এবং আরও অনেক কিছু গ্রহণ করবে তা হ্রাস করা হয়েছে। পরিবর্তে আপনার কনস্ট্রাক্টর ব্যবহার করা উচিত যা একটি দীর্ঘ গ্রহণ করে। আপনি যে তারিখটি চান তা তৈরি করতে এবং একটি দীর্ঘ হিসাবে সময়-উপস্থাপনা অ্যাক্সেস করতে একটি ক্যালেন্ডার বাস্তবায়ন ব্যবহার করতে পারেন , উদাহরণস্বরূপ getTimeInMillis পদ্ধতিতে।
DateTime
বস্তুটিতে প্রয়োগ করা হবে । তার মানে আপনার ফলাফলগুলি পৃথক হবে বিভিন্ন কম্পিউটার বা হোস্ট ওএস বা জেভিএম সেটিংসের কনফিগারেশনে । পূর্বাভাসযোগ্য ফলাফলের জন্য, সেই নির্মাতার কাছে একটি সময় অঞ্চল পাস করুন DateTime
। আপনার অভিপ্রায় জন্য যথাযথ সময় অঞ্চল নাম চয়ন করুন । উদাহরণস্বরূপ, DateTimeZone.forID( "America/Montreal" )
বা DateTimeZone.UTC
।
DateTime
পর্বের সময় থেকে অবধি কেবল মিলিসেকেন্ডের জন্য জিজ্ঞাসা করুন । .toDate().getTime()
সঙ্গে প্রতিস্থাপন .getMillis()
।
DateTimeZone.getDefault()
চ্ছিক যুক্তি হিসাবে ফলাফলটি কল করে এবং পাস করে সুস্পষ্টভাবে বলুন । (উপায় দ্বারা, optionচ্ছিক Locale.getDefault()
আর্গুমেন্টের অস্পষ্টতার বিষয়ে একই বিষয়।)