1. তারিখ সময় API প্রবর্তন

তারিখ সময় 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 today = LocalDate.now();
System.out.println("Today = " + today);

Today = 2019-02-22

একটি নির্দিষ্ট সময় অঞ্চলে একটি তারিখ পাওয়া

ক্লাসে LocalDateপদ্ধতির একটি ভিন্নতা রয়েছে now(ZoneId)যা আপনাকে একটি নির্দিষ্ট সময় অঞ্চলে বর্তমান তারিখ পেতে দেয়।

এটি করার জন্য, আমাদের আরেকটি ক্লাস প্রয়োজন - ZoneIdক্লাস (java.time.ZoneId)। এটির একটি of()পদ্ধতি রয়েছে যা ZoneIdসময় অঞ্চলের নাম দেওয়া একটি বস্তুকে ফেরত দেয়।

সাংহাইতে বর্তমান তারিখ নির্ধারণ করতে, আপনাকে নিম্নলিখিত কোডটি লিখতে হবে:

কোড কনসোল আউটপুট
ZoneId  timezone = ZoneId.of("Asia/Shanghai");
LocalDate today = LocalDate.now(timezone);
System.out.println("In Shanghai, now = " + today);


In Shanghai, now = 2019-02-22

আপনি ইন্টারনেটে সমস্ত সময় অঞ্চলের নামের একটি তালিকা খুঁজে পেতে পারেন৷


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 বছর পরে, মাসগুলি শেষ পর্যন্ত শূন্য থেকে গণনা করা বন্ধ হয়ে গেছে।

উদাহরণ:

কোড কনসোল আউটপুট
LocalDate today = LocalDate.of(2019, 2, 22);
System.out.println("Today = " + today);

Today = 2019-02-22

দিনের সূচক দ্বারা একটি তারিখ পাওয়া

একটি তারিখ তৈরি করার আরেকটি আকর্ষণীয় উপায় আছে: ofYearDayপদ্ধতিটি ব্যবহার করে, আপনি শুধুমাত্র বছরের সংখ্যা এবং বছরের দিনের সূচকের উপর ভিত্তি করে একটি তারিখ পেতে পারেন। এখানে সাধারণ চেহারা:

LocalDate date = LocalDate.ofYearDay(year, day);

যেখানে yearবছরের সংখ্যা এবং dayবছরের দিনের সূচকটি কোথায়।

উদাহরণ:

কোড কনসোল আউটপুট
LocalDate today = LocalDate.ofYearDay(2019, 100);
System.out.println("Today = " + today);

Today = 2019-04-10

2019 সালের 100তম দিন হল 10 এপ্রিল।

একটি ইউনিক্স তারিখ পাচ্ছেন

আপনার কি মনে আছে যে Dateবস্তুগুলি সর্বদা 1 জানুয়ারী, 1970 থেকে মিলিসেকেন্ডের সংখ্যা হিসাবে সময় সঞ্চয় করে? প্রোগ্রামাররা যাতে ভালো পুরানো দিনগুলি মিস না করে তা নিশ্চিত করার জন্য, LocalDateক্লাসটি একটি ofEpochDay()পদ্ধতি পেয়েছে, যা 1 জানুয়ারী, 1970 থেকে গণনা করা তারিখটি প্রদান করে। এখানে সাধারণ উপস্থিতি রয়েছে:

LocalDate date = LocalDate.ofEpochDay(day);

1970 সালের 1 জানুয়ারী থেকে কয়টি dayদিন অতিবাহিত হয়েছে।

উদাহরণ:

কোড কনসোল আউটপুট
LocalDate today = LocalDate.ofEpochDay(1);
System.out.println("Today = " + today);

Today = 1970-01-02

4. তারিখের উপাদান পাওয়া

বস্তু পরিবর্তন করা অসম্ভব LocalDate, তবে আপনি সঞ্চিত তারিখের পৃথক উপাদান পেতে পারেন। LocalDateবস্তুর এর জন্য বিভিন্ন পদ্ধতি রয়েছে:

পদ্ধতি বর্ণনা
int getYear()
একটি নির্দিষ্ট তারিখের বছর প্রদান করে
Month getMonth()
তারিখের মাস দেখায়: বেশ কয়েকটি ধ্রুবকের মধ্যে একটি
JANUARY, FEBRUARY, ...;
int getMonthValue()
তারিখের মাসের সূচী প্রদান করে। জানুয়ারি == ১।
int getDayOfMonth()
মাসের দিনের সূচী প্রদান করে
int getDayOfYear()
বছরের শুরু থেকে দিনের সূচী প্রদান করে
DayOfWeek getDayOfWeek()
সপ্তাহের দিন ফেরত দেয়: বেশ কয়েকটি ধ্রুবকের মধ্যে একটি
MONDAY, TUESDAY, ...;
IsoEra getEra()
যুগ ফিরিয়ে দেয়: হয় BCE(বর্তমান যুগের আগে) এবং CE(বর্তমান যুগ)

উদাহরণ:

কোড কনসোল আউটপুট
LocalDate today = LocalDate.now();
System.out.println(today.getYear());
System.out.println(today.getMonth());
System.out.println(today.getMonthValue());
System.out.println(today.getDayOfMonth());
System.out.println(today.getDayOfWeek());

2019
FEBRUARY
2
22
FRIDAY

LocalDate5. একটি বস্তুর তারিখ পরিবর্তন

ক্লাসে LocalDateবিভিন্ন পদ্ধতি রয়েছে যা আপনাকে তারিখের সাথে কাজ করতে দেয়। এই পদ্ধতিগুলির বাস্তবায়ন ক্লাসের পদ্ধতিগুলির সাথে সাদৃশ্যপূর্ণ String: তারা বিদ্যমান LocalDateবস্তুর পরিবর্তন করে না, বরং পছন্দসই ডেটা সহ একটি নতুন ফেরত দেয়।

এখানে ক্লাসের পদ্ধতিগুলি রয়েছে LocalDate:

পদ্ধতি বর্ণনা
plusDays(int days)
তারিখে একটি নির্দিষ্ট দিন যোগ করে
plusWeeks(int weeks)
তারিখে সপ্তাহ যোগ করে
plusMonths(int months)
তারিখে মাস যোগ করে
plusYears(int years)
তারিখে বছর যোগ করে
minusDays(int days)
তারিখ থেকে দিন বিয়োগ করে
minusWeeks(int weeks)
তারিখ থেকে সপ্তাহ বিয়োগ করে
minusMonths(int months)
তারিখ থেকে মাস বিয়োগ করে
minusYears(int years)
তারিখ থেকে বছর বিয়োগ করে

উদাহরণ:

কোড কনসোল আউটপুট
LocalDate birthday = LocalDate.of(2019, 2, 28);
LocalDate nextBirthday = birthday.plusYears(1);
LocalDate firstBirthday = birthday.minusYears(30);

System.out.println(birthday);
System.out.println(nextBirthday);
System.out.println(firstBirthday);




2019-02-28
2020-02-28
1989-02-28

আমরা যাদের birthday objectপদ্ধতি বলি তা পরিবর্তন হয় না। পরিবর্তে, এর পদ্ধতিগুলি পছন্দসই ডেটা ধারণ করে এমন নতুন বস্তু ফেরত দেয়।