1. তারিখ সময় API প্রবর্তন
জাভার নির্মাতারা তারিখ এবং ক্যালেন্ডার ক্লাসের পরিস্থিতি পছন্দ করেননি। তারা তাদের দিন ভাল ছিল, কিন্তু সময় পরিবর্তন. এবং সহজ, শক্তিশালী এবং নির্ভরযোগ্য কিছু প্রয়োজনীয় হয়ে ওঠে। এবং জাভা 8 প্রকাশের সাথে ( Calendar
আবির্ভূত হওয়ার 15 বছর পরে), জাভা ডেট টাইম এপিআই চালু করা হয়েছিল। এটি ক্লাসের একটি সেট যা সময়ের সাথে মোকাবিলা করার প্রতিটি সম্ভাব্য কাজ সমাধান করতে সক্ষম হওয়া উচিত।
অনেকগুলি ক্লাস ছিল যেগুলিকে কয়েকটি প্যাকেজে বিভক্ত করা হয়েছিল:
প্যাকেজটি java.time
হল জাভা ডেট টাইম API-এর বেস প্যাকেজ: এতে ক্লাস রয়েছে যেমন LocalDate
, LocalTime
, LocalDateTime
, Instant
, Period
, এবং Duration
. এই শ্রেণীর সমস্ত বস্তু হল immutable
, যার মানে সৃষ্টির পরে পরিবর্তন করা যাবে না।
প্যাকেজটিতে java.time.format
সময় বিন্যাসের জন্য ক্লাস রয়েছে, যেমন সময় (এবং তারিখগুলি) স্ট্রিংগুলিতে রূপান্তর করা এবং এর বিপরীতে। উদাহরণস্বরূপ, এতে বহুমুখী DateTimeFormatter
শ্রেণী রয়েছে, যা SimpleDateFormat
শ্রেণীকে প্রতিস্থাপন করে।
প্যাকেজটিতে java.time.zone
সময় অঞ্চলের সাথে কাজ করার জন্য ক্লাস রয়েছে। এটিতে ক্লাস রয়েছে যেমন TimeZone
এবং ZonedDateTime
. আপনি যদি বিশ্বের বিভিন্ন অংশে অবস্থিত ক্লায়েন্টদের জন্য সার্ভার কোড লিখছেন, আপনার সত্যিই এই ক্লাসগুলির প্রয়োজন হবে।
2. LocalDate
ক্লাস
ডেট টাইম API থেকে প্রথম এবং সবচেয়ে দরকারী ক্লাস যা আমরা দেখব তা হল ক্লাস LocalDate
। আপনি সম্ভবত এর নাম থেকে অনুমান করতে পারেন, এই ক্লাসটি তারিখের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে।
এই শ্রেণীর বস্তুগুলি তৈরি হওয়ার পরে পরিবর্তন হয় না, অর্থাৎ শ্রেণীটি LocalDate
অপরিবর্তনীয়। কিন্তু এই সম্পত্তি ক্লাসে সরলতা এবং নির্ভরযোগ্যতা যোগ করে। বিশেষ করে যদি একাধিক থ্রেড (নির্বাহের থ্রেড) একই সময়ে এই জাতীয় বস্তুর সাথে ইন্টারঅ্যাক্ট করে।
একটি নতুন বস্তু তৈরি করতে LocalDate
, আপনাকে স্ট্যাটিক পদ্ধতিগুলির একটি ব্যবহার করতে হবে। এখানে প্রধান বেশী একটি তালিকা.
বর্তমান তারিখ পাচ্ছেন
বর্তমান তারিখ পেতে, আপনাকে স্ট্যাটিক now()
পদ্ধতি ব্যবহার করতে হবে। এটি মনে হওয়ার চেয়ে অনেক সহজ:
LocalDate today = LocalDate.now();
যেখানে today
একটি LocalDate
পরিবর্তনশীল, এবং ক্লাসের LocalDate.now()
স্ট্যাটিক পদ্ধতিতে একটি কল ।now()
LocalDate
উদাহরণ:
কোড | কনসোল আউটপুট |
---|---|
|
|
একটি নির্দিষ্ট সময় অঞ্চলে একটি তারিখ পাওয়া
ক্লাসে LocalDate
পদ্ধতির একটি ভিন্নতা রয়েছে now(ZoneId)
যা আপনাকে একটি নির্দিষ্ট সময় অঞ্চলে বর্তমান তারিখ পেতে দেয়।
এটি করার জন্য, আমাদের আরেকটি ক্লাস প্রয়োজন - ZoneId
ক্লাস (java.time.ZoneId)। এটির একটি of()
পদ্ধতি রয়েছে যা ZoneId
সময় অঞ্চলের নাম দেওয়া একটি বস্তুকে ফেরত দেয়।
সাংহাইতে বর্তমান তারিখ নির্ধারণ করতে, আপনাকে নিম্নলিখিত কোডটি লিখতে হবে:
কোড | কনসোল আউটপুট |
---|---|
|
|
আপনি ইন্টারনেটে সমস্ত সময় অঞ্চলের নামের একটি তালিকা খুঁজে পেতে পারেন৷
3. একটি নির্দিষ্ট তারিখ পাওয়া
একটি নির্দিষ্ট তারিখের প্রতিনিধিত্ব করে এমন একটি বস্তু পেতে LocalDate
, আপনাকে স্ট্যাটিক of()
পদ্ধতি ব্যবহার করতে হবে। এখানে সবকিছু খুব সহজ এবং পরিষ্কার:
LocalDate date = LocalDate.of(2019, Month.FEBRUARY, 22);
যেখানে date
একটি LocalDate
পরিবর্তনশীল, এবং ক্লাসের স্ট্যাটিক পদ্ধতিতে একটি কল ।LocalDate.of()
of()
LocalDate
এখানে আমরা দেখতে পাচ্ছি FEBRUARY
ক্লাসের ধ্রুবক Month
(java.time.Month) মাস হিসাবে ফেব্রুয়ারি নির্দিষ্ট করতে ব্যবহৃত হচ্ছে।
আপনি পুরানো পদ্ধতিতে মাসটি নির্দিষ্ট করতে পারেন — একটি সংখ্যা ব্যবহার করে:
LocalDate date = LocalDate.of(2019, 2, 22);
দুই? ফেব্রুয়ারির বদলে? তার মানে কি মাসগুলো আবার এক থেকে গণনা করা হচ্ছে?
হ্যাঁ, জাভা তৈরির প্রায় 20 বছর পরে, মাসগুলি শেষ পর্যন্ত শূন্য থেকে গণনা করা বন্ধ হয়ে গেছে।
উদাহরণ:
কোড | কনসোল আউটপুট |
---|---|
|
|
দিনের সূচক দ্বারা একটি তারিখ পাওয়া
একটি তারিখ তৈরি করার আরেকটি আকর্ষণীয় উপায় আছে: ofYearDay
পদ্ধতিটি ব্যবহার করে, আপনি শুধুমাত্র বছরের সংখ্যা এবং বছরের দিনের সূচকের উপর ভিত্তি করে একটি তারিখ পেতে পারেন। এখানে সাধারণ চেহারা:
LocalDate date = LocalDate.ofYearDay(year, day);
যেখানে year
বছরের সংখ্যা এবং day
বছরের দিনের সূচকটি কোথায়।
উদাহরণ:
কোড | কনসোল আউটপুট |
---|---|
|
|
2019 সালের 100তম দিন হল 10 এপ্রিল।
একটি ইউনিক্স তারিখ পাচ্ছেন
আপনার কি মনে আছে যে Date
বস্তুগুলি সর্বদা 1 জানুয়ারী, 1970 থেকে মিলিসেকেন্ডের সংখ্যা হিসাবে সময় সঞ্চয় করে? প্রোগ্রামাররা যাতে ভালো পুরানো দিনগুলি মিস না করে তা নিশ্চিত করার জন্য, LocalDate
ক্লাসটি একটি ofEpochDay()
পদ্ধতি পেয়েছে, যা 1 জানুয়ারী, 1970 থেকে গণনা করা তারিখটি প্রদান করে। এখানে সাধারণ উপস্থিতি রয়েছে:
LocalDate date = LocalDate.ofEpochDay(day);
1970 সালের 1 জানুয়ারী থেকে কয়টি day
দিন অতিবাহিত হয়েছে।
উদাহরণ:
কোড | কনসোল আউটপুট |
---|---|
|
|
4. তারিখের উপাদান পাওয়া
বস্তু পরিবর্তন করা অসম্ভব LocalDate
, তবে আপনি সঞ্চিত তারিখের পৃথক উপাদান পেতে পারেন। LocalDate
বস্তুর এর জন্য বিভিন্ন পদ্ধতি রয়েছে:
পদ্ধতি | বর্ণনা |
---|---|
|
একটি নির্দিষ্ট তারিখের বছর প্রদান করে |
|
তারিখের মাস দেখায়: বেশ কয়েকটি ধ্রুবকের মধ্যে একটিJANUARY, FEBRUARY, ...; |
|
তারিখের মাসের সূচী প্রদান করে। জানুয়ারি == ১। |
|
মাসের দিনের সূচী প্রদান করে |
|
বছরের শুরু থেকে দিনের সূচী প্রদান করে |
|
সপ্তাহের দিন ফেরত দেয়: বেশ কয়েকটি ধ্রুবকের মধ্যে একটিMONDAY, TUESDAY, ...; |
|
যুগ ফিরিয়ে দেয়: হয় BCE (বর্তমান যুগের আগে) এবং CE (বর্তমান যুগ) |
উদাহরণ:
কোড | কনসোল আউটপুট |
---|---|
|
|
LocalDate
5. একটি বস্তুর তারিখ পরিবর্তন
ক্লাসে LocalDate
বিভিন্ন পদ্ধতি রয়েছে যা আপনাকে তারিখের সাথে কাজ করতে দেয়। এই পদ্ধতিগুলির বাস্তবায়ন ক্লাসের পদ্ধতিগুলির সাথে সাদৃশ্যপূর্ণ String
: তারা বিদ্যমান LocalDate
বস্তুর পরিবর্তন করে না, বরং পছন্দসই ডেটা সহ একটি নতুন ফেরত দেয়।
এখানে ক্লাসের পদ্ধতিগুলি রয়েছে LocalDate
:
পদ্ধতি | বর্ণনা |
---|---|
|
তারিখে একটি নির্দিষ্ট দিন যোগ করে |
|
তারিখে সপ্তাহ যোগ করে |
|
তারিখে মাস যোগ করে |
|
তারিখে বছর যোগ করে |
|
তারিখ থেকে দিন বিয়োগ করে |
|
তারিখ থেকে সপ্তাহ বিয়োগ করে |
|
তারিখ থেকে মাস বিয়োগ করে |
|
তারিখ থেকে বছর বিয়োগ করে |
উদাহরণ:
কোড | কনসোল আউটপুট |
---|---|
|
|
আমরা যাদের birthday object
পদ্ধতি বলি তা পরিবর্তন হয় না। পরিবর্তে, এর পদ্ধতিগুলি পছন্দসই ডেটা ধারণ করে এমন নতুন বস্তু ফেরত দেয়।
GO TO FULL VERSION