Java 8 এবং পরবর্তী সংস্করণের java.time প্যাকেজটি তারিখ ও সময় সম্পর্কিত কার্যক্রম পরিচালনার জন্য অত্যন্ত শক্তিশালী এবং সুবিধাজনক ক্লাস সরবরাহ করে। এর মধ্যে দুটি গুরুত্বপূর্ণ উপাদান হল Temporal এবং ChronoUnit।
Temporalহল একটি ইন্টারফেস, যা সমস্ত তারিখ এবং সময় সম্পর্কিত ক্লাসগুলোর জন্য একটি সাধারণ টাইপ। এটি তারিখ, সময় বা তারিখ-সময় ম্যানিপুলেশন করার জন্য একটি সাধারণ চুক্তি সরবরাহ করে।ChronoUnitহল একটি enum যা জেনেরিক সময় একক (যেমন সেকেন্ড, মিনিট, দিন, মাস, বছর) নির্ধারণ করে এবং এটিTemporalঅবজেক্টের সাথে কাজ করার জন্য সহায়ক মেথড প্রদান করে।
1. Temporal Interface
Temporal ইন্টারফেসটি LocalDate, LocalTime, LocalDateTime, ZonedDateTime ইত্যাদি ক্লাসগুলির মধ্যে সাধারণ কন্ট্রাক্ট হিসেবে কাজ করে। এটি তারিখ এবং সময়ের বিভিন্ন অংশে পরিবর্তন করার জন্য plus(), minus(), until(), এবং isBefore(), isAfter() এর মতো মেথড প্রদান করে।
Temporal Interface এর উদাহরণ:
import java.time.LocalDate;
import java.time.temporal.Temporal;
import java.time.temporal.ChronoUnit;
public class TemporalExample {
public static void main(String[] args) {
// Create a LocalDate instance
LocalDate today = LocalDate.now();
// Use Temporal interface methods: plus and minus
Temporal nextWeek = today.plus(1, ChronoUnit.WEEKS); // Adding one week
Temporal previousMonth = today.minus(1, ChronoUnit.MONTHS); // Subtracting one month
// Print results
System.out.println("Today's Date: " + today);
System.out.println("Next Week: " + nextWeek);
System.out.println("One Month Ago: " + previousMonth);
// Calculate the difference between two dates
long daysBetween = today.until(nextWeek, ChronoUnit.DAYS);
System.out.println("Days between today and next week: " + daysBetween);
}
}
আউটপুট:
Today's Date: 2024-12-23
Next Week: 2024-12-30
One Month Ago: 2024-11-23
Days between today and next week: 7
ব্যাখ্যা:
plus(1, ChronoUnit.WEEKS)এবংminus(1, ChronoUnit.MONTHS)মেথডগুলিTemporalইন্টারফেসের মাধ্যমে তারিখের সাথে একক সময় (যেমন, এক সপ্তাহ বা এক মাস) যোগ বা বিয়োগ করে।until()মেথডটি দুইটি তারিখের মধ্যে পার্থক্য বের করতে ব্যবহৃত হয়, এখানে এটিChronoUnit.DAYSব্যবহার করে দুটি তারিখের মধ্যে দিন হিসেবে পার্থক্য বের করেছে।
2. ChronoUnit Enum
ChronoUnit হল একটি enum যা সময়ের বিভিন্ন একক (যেমন সেকেন্ড, মিনিট, ঘণ্টা, দিন, মাস, বছর ইত্যাদি) নির্ধারণ করে। এটি Temporal অবজেক্টের উপর পরিচালনা করতে সাহায্য করে। ChronoUnit এর মেথডগুলির মধ্যে সবচেয়ে বেশি ব্যবহৃত হল DAYS, HOURS, MINUTES, SECONDS, MONTHS, এবং YEARS।
ChronoUnit ব্যবহার করে সময়ের পার্থক্য বের করা
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
public class ChronoUnitExample {
public static void main(String[] args) {
// Create two LocalDate instances
LocalDate startDate = LocalDate.of(2024, 1, 1);
LocalDate endDate = LocalDate.of(2024, 12, 23);
// Calculate the number of days between two dates
long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
System.out.println("Days between " + startDate + " and " + endDate + ": " + daysBetween);
// Calculate the number of months between two dates
long monthsBetween = ChronoUnit.MONTHS.between(startDate, endDate);
System.out.println("Months between " + startDate + " and " + endDate + ": " + monthsBetween);
// Calculate the number of years between two dates
long yearsBetween = ChronoUnit.YEARS.between(startDate, endDate);
System.out.println("Years between " + startDate + " and " + endDate + ": " + yearsBetween);
}
}
আউটপুট:
Days between 2024-01-01 and 2024-12-23: 357
Months between 2024-01-01 and 2024-12-23: 11
Years between 2024-01-01 and 2024-12-23: 0
ব্যাখ্যা:
ChronoUnit.DAYS.between(startDate, endDate)ব্যবহার করে দুটি তারিখের মধ্যে দিন হিসেবে পার্থক্য বের করা হয়েছে।ChronoUnit.MONTHS.between()এবংChronoUnit.YEARS.between()মেথডগুলি ব্যবহার করে মাস এবং বছর হিসাব করা হয়েছে।
3. Temporal Adjusters (Temporal.adjustInto())
Java 8-এ Temporal.adjustInto() মেথড ব্যবহার করে আমরা একটি Temporal অবজেক্টে কাস্টম তারিখ এবং সময়ের পরিবর্তন করতে পারি। এটি TemporalAdjuster ইন্টারফেস ব্যবহার করে।
Temporal Adjuster উদাহরণ:
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class TemporalAdjustersExample {
public static void main(String[] args) {
// Create a LocalDate instance
LocalDate date = LocalDate.of(2024, 12, 23);
// Adjust the date to the next Sunday
LocalDate nextSunday = date.with(TemporalAdjusters.next(java.time.DayOfWeek.SUNDAY));
System.out.println("Next Sunday: " + nextSunday);
// Adjust the date to the first day of the month
LocalDate firstDayOfMonth = date.with(TemporalAdjusters.firstDayOfMonth());
System.out.println("First Day of the Month: " + firstDayOfMonth);
// Adjust the date to the last day of the month
LocalDate lastDayOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("Last Day of the Month: " + lastDayOfMonth);
}
}
আউটপুট:
Next Sunday: 2024-12-29
First Day of the Month: 2024-12-01
Last Day of the Month: 2024-12-31
ব্যাখ্যা:
TemporalAdjusters.next()মেথডটি দেওয়া তারিখ থেকে পরবর্তী নির্দিষ্ট দিনের (যেমন, রবিবার) তারিখ নির্ধারণ করে।TemporalAdjusters.firstDayOfMonth()এবংTemporalAdjusters.lastDayOfMonth()মেথডগুলি বর্তমান মাসের প্রথম এবং শেষ দিনের তারিখ নির্ধারণ করে।
সারাংশ:
Temporalইন্টারফেসটি তারিখ এবং সময়ের বিভিন্ন অংশে পরিবর্তন করার জন্য ব্যবহৃত হয় এবং এটিLocalDate,LocalTime,LocalDateTime,ZonedDateTimeইত্যাদির জন্য একটি সাধারণ চুক্তি প্রদান করে।ChronoUnitএন্টামটি সময়ের একক (যেমন সেকেন্ড, মিনিট, দিন, মাস, বছর) নির্ধারণ করে এবংTemporalঅবজেক্টের সাথে কাজ করতে সহায়তা করে।TemporalAdjustersইন্টারফেসটি ব্যবহার করে আপনি বিভিন্ন কাস্টম তারিখ এবং সময় ম্যানিপুলেশন করতে পারেন যেমন, পরবর্তী রবিবার, মাসের প্রথম দিন ইত্যাদি।
Java 8 এর java.time প্যাকেজটি সময় এবং তারিখের সাথে কাজ করার জন্য অত্যন্ত শক্তিশালী এবং সহজ API সরবরাহ করে, যা আগের java.util.Date এবং Calendar ক্লাসের তুলনায় অনেক বেশি কার্যকরী এবং কম্প্যাক্ট।