java.util.Date এবং java.util.Calendar ক্লাস দুটি Java প্রোগ্রামিং ভাষায় সময় এবং তারিখ সম্পর্কিত কাজের জন্য ব্যবহৃত হয়। যদিও Java 8 থেকে java.time প্যাকেজটি Date এবং Calendar ক্লাসের পরিবর্তে ব্যবহৃত হচ্ছে, তবে এখনও অনেক পুরোনো কোডবেসে বা কিছু নির্দিষ্ট ক্ষেত্রে এই ক্লাসগুলির ব্যবহার হয়। এখানে আমরা Date এবং Calendar ক্লাসের ব্যবহার, বৈশিষ্ট্য, এবং তাদের মধ্যে পার্থক্য নিয়ে আলোচনা করব।
1. Date ক্লাস
Date ক্লাসটি পুরনো java.util প্যাকেজের একটি গুরুত্বপূর্ণ ক্লাস যা একটি নির্দিষ্ট তারিখ এবং সময়ের প্রতিনিধিত্ব করে। এটি 1970-01-01 থেকে 1970-01-01 00:00:00 UTC পর্যন্ত সময়ের পয়েন্ট থেকে millisecond হিসাবে সময় পরিমাপ করে। তবে, এই ক্লাসটি mutable (পরিবর্তনযোগ্য), যার ফলে এর ব্যবহার কিছুটা সীমিত।
Date ক্লাসের বৈশিষ্ট্য:
- Represents a specific instant in time: এটি একটি নির্দিষ্ট সময় এবং তারিখকে millisecond এ পরিমাপ করে।
- Mutable: এটি mutable ক্লাস, অর্থাৎ একটি Date অবজেক্ট তৈরি করার পর তার মান পরিবর্তন করা যায়।
- Legacy Class: Java 8 এর পরে এটি deprecated (অবসরপ্রাপ্ত) হয়েছে, এবং এর পরিবর্তে
java.time.LocalDate,java.time.LocalDateTime,java.time.ZonedDateTimeব্যবহার করা উচিত।
Date ক্লাসের উদাহরণ:
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
// বর্তমান তারিখ এবং সময়
Date currentDate = new Date();
System.out.println("Current Date: " + currentDate);
// নির্দিষ্ট তারিখ ও সময়
Date specificDate = new Date(121, 5, 15); // Deprecated constructor
System.out.println("Specific Date: " + specificDate);
}
}
Output:
Current Date: Tue Dec 23 12:45:36 IST 2024
Specific Date: Wed Jun 15 00:00:00 IST 2021
ব্যাখ্যা:
Date()কনস্ট্রাক্টরটি বর্তমান সময় এবং তারিখ প্রদান করে।Date(int year, int month, int date)কনস্ট্রাক্টরটি deprecated হওয়ায় এর ব্যবহার এড়িয়ে চলা উচিত, তবে এটি একটি নির্দিষ্ট বছর, মাস, এবং দিন সহ তারিখ তৈরি করতে ব্যবহৃত হয়।
2. Calendar ক্লাস
Calendar ক্লাসটি Date ক্লাসের কিছু সীমাবদ্ধতা দূর করতে ডিজাইন করা হয়েছিল। এটি abstract class (অ্যাবস্ট্র্যাক্ট ক্লাস) এবং এটি একটি নির্দিষ্ট তারিখ ও সময়কে সমন্বিত করার জন্য আরও উন্নত পদ্ধতি সরবরাহ করে। Calendar-এর মাধ্যমে আপনি তারিখের উপাদানগুলো (যেমন, বছর, মাস, দিন, ঘণ্টা, মিনিট) পৃথকভাবে অ্যাক্সেস এবং পরিবর্তন করতে পারবেন।
Calendar ক্লাসের বৈশিষ্ট্য:
- Abstract Class: এটি একটি অ্যাবস্ট্র্যাক্ট ক্লাস, তাই আপনি সরাসরি এটি ইন্সট্যান্সিয়েট করতে পারবেন না। এটি
GregorianCalendarবা অন্য কোন বাস্তবায়ন থেকে কাজ করে। - Manipulate Dates: এটি date এর উপাদানগুলি (যেমন YEAR, MONTH, DAY_OF_MONTH, HOUR, MINUTE) এক্সট্রাক্ট এবং পরিবর্তন করতে সক্ষম।
- Time Zones:
Calendarটাইমজোনের সাপোর্ট দিয়ে থাকে, যা সময়ের স্থানীয় রূপান্তর করতে সহায়তা করে।
Calendar ক্লাসের উদাহরণ:
import java.util.Calendar;
public class CalendarExample {
public static void main(String[] args) {
// Calendar ইনস্ট্যান্স তৈরি করা
Calendar calendar = Calendar.getInstance();
// বর্তমান সময় এবং তারিখ দেখানো
System.out.println("Current Date: " + calendar.getTime());
// মাস পরিবর্তন করা
calendar.set(Calendar.MONTH, 5); // জুন (মাসের ইনডেক্স 0 থেকে শুরু)
System.out.println("Updated Date: " + calendar.getTime());
// 10 দিন পরের তারিখ
calendar.add(Calendar.DAY_OF_MONTH, 10);
System.out.println("Date after 10 days: " + calendar.getTime());
}
}
Output:
Current Date: Tue Dec 23 12:45:36 IST 2024
Updated Date: Fri Jun 23 12:45:36 IST 2024
Date after 10 days: Mon Jul 03 12:45:36 IST 2024
ব্যাখ্যা:
getTime()মেথডটিCalendarঅবজেক্টের মান (Date অবজেক্ট) ফেরত দেয়।set()মেথডের মাধ্যমে Calendar এর মাস পরিবর্তন করা হয়েছে।add()মেথডের মাধ্যমে বর্তমান তারিখে 10 দিন যোগ করা হয়েছে।
Date এবং Calendar ক্লাসের মধ্যে পার্থক্য
| Feature | Date | Calendar |
|---|---|---|
| Class Type | Concrete class | Abstract class |
| Instantiation | Directly instantiable | Cannot be instantiated directly (use GregorianCalendar or other subclasses) |
| Date/Time Manipulation | Limited capabilities | Extensive capabilities to manipulate date and time |
| Time Zones | Does not directly support time zones | Supports time zones and date-time manipulations |
| Methods | Simple methods like getTime(), setTime() | Advanced methods like set(), add(), get() for individual fields (Year, Month, etc.) |
| Thread-Safety | Not thread-safe | Not thread-safe, but can be used in a thread-safe manner |
| Deprecated | Yes, many methods are deprecated | No, but Date methods are still used within Calendar |
Date এবং Calendar ক্লাসের উন্নত পদ্ধতি (Java 8 and onwards)
Java 8 এর পর, java.time প্যাকেজটি Date এবং Calendar ক্লাসের বদলে উন্নত সময় এবং তারিখ সম্পর্কিত কার্যাবলী সরবরাহ করতে শুরু করেছে। LocalDate, LocalDateTime, ZonedDateTime ইত্যাদি ক্লাসগুলো ব্যবহার করে সময় ও তারিখের পরিপূর্ণ গণনা করা সম্ভব।
Dateক্লাসটি পুরনো এবং বেশিরভাগ ক্ষেত্রেই deprecated হয়েছে। এটি একটি নির্দিষ্ট সময়ের millisecond পরিমাপ প্রদান করলেও এর কিছু সীমাবদ্ধতা ছিল।Calendarক্লাসটি আরও উন্নত এবং সময়ের উপাদানগুলো নিয়ে কাজ করার জন্য বেশি কার্যকরী। তবে,java.timeপ্যাকেজের আসার পর, এটিDateএবংCalendarক্লাসের জন্য বিকল্প হিসেবে ব্যবহৃত হচ্ছে।- Java 8 এবং পরবর্তীতে
java.timeপ্যাকেজের নতুন ক্লাসগুলি টাইম জোন, স্ট্যান্ডার্ডাইজড API এবং অন্যান্য উন্নত বৈশিষ্ট্য নিয়ে এসেছে, যা সময় এবং তারিখের গণনায় আরো উন্নতি করেছে।
java.util.Date এবং java.util.Calendar ক্লাস দুটি Java প্রোগ্রামিং ভাষায় date এবং time সম্পর্কিত কার্যাবলী পরিচালনা করতে ব্যবহৃত হয়। যদিও বর্তমানে java.time প্যাকেজ (Java 8-এর পর) সময় এবং তারিখ সম্পর্কিত আরও উন্নত এবং নির্ভুল API সরবরাহ করে, তবুও Date এবং Calendar এখনও কিছু পুরনো কোডে ব্যবহৃত হয় এবং তাদের গুরুত্বপূর্ণ ভূমিকা রয়েছে।
এখানে Date এবং Calendar ক্লাসের বৈশিষ্ট্য এবং ব্যবহারের বিস্তারিত আলোচনা করা হবে।
1. Date ক্লাস:
java.util.Date ক্লাসটি একটি নির্দিষ্ট তারিখ এবং সময়ের প্রতিনিধিত্ব করে এবং এটি milliseconds হিসেবে বর্তমান সময়ের মান ধারণ করে (January 1, 1970, 00:00:00 GMT থেকে)। যদিও Date ক্লাসটি পরবর্তীতে java.time প্যাকেজের মাধ্যমে উন্নত হয়েছে, এটি এখনও অনেক পুরনো কোডে ব্যবহৃত হয়।
Date ক্লাসের বৈশিষ্ট্য:
Dateক্লাসের অবজেক্টের মাধ্যমে আপনি বর্তমান সময় এবং তারিখ পাবেন।- এটি একটি নির্দিষ্ট সময়কে milliseconds হিসেবে ধারণ করে।
Dateক্লাসেtoString()মেথড ব্যবহার করে আপনি একটি readable String তারিখ পেতে পারেন।Dateক্লাসের মাধ্যমে তারিখের সাথে কিছু গাণিতিক অপারেশন (যেমন যোগ বা বিয়োগ) করা সম্ভব নয়।
উদাহরণ:
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
// Date অবজেক্ট তৈরি করা
Date date = new Date();
// বর্তমান তারিখ এবং সময় প্রিন্ট করা
System.out.println("Current Date and Time: " + date.toString());
}
}
Output:
Current Date and Time: Mon Dec 23 15:45:22 IST 2024
ব্যাখ্যা:
Dateঅবজেক্টের মাধ্যমে বর্তমান তারিখ এবং সময়toString()মেথড ব্যবহার করে প্রদর্শন করা হয়েছে।
2. Calendar ক্লাস:
java.util.Calendar ক্লাসটি Date ক্লাসের উন্নত সংস্করণ হিসেবে পরিচিত এবং এটি তারিখ এবং সময়ের সাথে আরো জটিল অপারেশন করতে সহায়তা করে। Calendar ক্লাসের মাধ্যমে আপনি তারিখের বিভিন্ন উপাদান (যেমন, বছর, মাস, দিন, ঘণ্টা, মিনিট, সেকেন্ড) অ্যাক্সেস করতে এবং তাদের সাথে গণনা করতে পারেন।
Calendar ক্লাসের বৈশিষ্ট্য:
Calendarক্লাস তারিখের সাথে বিভিন্ন অপারেশন (যেমন, একটি নির্দিষ্ট দিনের যোগ বা বিয়োগ) করতে পারে।Calendarক্লাসেরget(),set(),add(), এবংroll()মেথডের মাধ্যমে আপনি বছরের, মাসের, দিনের, ঘণ্টার এবং অন্যান্য উপাদানগুলো অ্যাক্সেস এবং পরিবর্তন করতে পারেন।- এটি
Dateক্লাসের পরিবর্তে তারিখের গণনা ও পরিচালনার জন্য বেশি সুবিধাজনক।
উদাহরণ:
import java.util.Calendar;
public class CalendarExample {
public static void main(String[] args) {
// Calendar অবজেক্ট তৈরি করা
Calendar calendar = Calendar.getInstance();
// বর্তমান বছরের মান প্রিন্ট করা
int year = calendar.get(Calendar.YEAR);
System.out.println("Current Year: " + year);
// বর্তমান মাসের মান প্রিন্ট করা (মাসের সংখ্যা 0 থেকে শুরু হয়, January = 0)
int month = calendar.get(Calendar.MONTH) + 1; // January will be 1
System.out.println("Current Month: " + month);
// বর্তমান দিনের মান প্রিন্ট করা
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("Current Day of the Month: " + dayOfMonth);
// 10 দিন যোগ করা
calendar.add(Calendar.DAY_OF_MONTH, 10);
System.out.println("Date after 10 days: " + calendar.getTime());
}
}
Output:
Current Year: 2024
Current Month: 12
Current Day of the Month: 23
Date after 10 days: Sun Jan 02 15:45:22 IST 2025
ব্যাখ্যা:
Calendar.getInstance()মেথডের মাধ্যমে একটিCalendarঅবজেক্ট তৈরি করা হয়েছে।get(Calendar.YEAR),get(Calendar.MONTH), এবংget(Calendar.DAY_OF_MONTH)মেথডগুলোর মাধ্যমে বছর, মাস এবং দিনের মান পাওয়ার জন্য ব্যবহৃত হয়েছে।add(Calendar.DAY_OF_MONTH, 10)মেথডের মাধ্যমে বর্তমান তারিখের ১০ দিন যোগ করা হয়েছে।
Date এবং Calendar ক্লাসের মধ্যে পার্থক্য:
| Feature | Date | Calendar |
|---|---|---|
| Purpose | Represents a specific point in time in milliseconds from January 1, 1970 | Provides more flexible date and time manipulation (e.g., adding days, months) |
| Methods | Limited methods for manipulation (e.g., toString(), getTime()) | Offers a rich set of methods (add(), roll(), get(), set()) |
| Time Zone | Time zone is not directly handled. | Can handle time zone and supports TimeZone class. |
| Support for Date Manipulation | Does not support much date manipulation. | Supports complex date operations like adding/subtracting months, days, etc. |
| Null Handling | Can be null, and it can lead to NullPointerException if not initialized properly | Calendar instances cannot be null if properly instantiated |
java.time API - পরবর্তী প্রজন্ম:
Java 8 এর পর java.time প্যাকেজটি Date এবং Calendar ক্লাসগুলির উন্নত সংস্করণ হিসাবে এসেছে। java.time প্যাকেজটি আরও নির্ভুল, পাঠযোগ্য এবং মাল্টিথ্রেডিং পরিবেশে নিরাপদ। LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Duration, এবং Period সহ আরও অনেক নতুন ক্লাস Date এবং Calendar এর পুরনো কোডের চেয়ে অনেক বেশি সুবিধা প্রদান করে।
DateএবংCalendarক্লাসগুলি পুরানো সময় এবং তারিখ ব্যবস্থাপনার জন্য ব্যবহৃত হয়, তবে এগুলির সীমাবদ্ধতা রয়েছে।Calendarক্লাসDateক্লাসের তুলনায় বেশি ক্ষমতাশালী এবং এটি তারিখ এবং সময়ের সাথে জটিল গাণিতিক কার্যাবলী করতে সক্ষম।- Java 8 এর পর
java.timeপ্যাকেজটি উন্নত এবং নির্ভুল তারিখ এবং সময় ব্যবস্থাপনা সরবরাহ করে, যাDateএবংCalendarএর বিকল্প হিসেবে ব্যবহার করা হয়।
java.util.Date এবং java.util.Calendar আজও অনেক পুরনো কোডে ব্যবহৃত হয়, তবে সেগুলির বিকল্প হিসেবে java.time প্যাকেজটি এখন আধুনিক Java অ্যাপ্লিকেশনের জন্য আরও উপযুক্ত।
java.util.Date ক্লাসটি Java প্রোগ্রামিং ভাষায় সময় এবং তারিখের প্রতিনিধিত্ব করার জন্য ব্যবহৃত একটি পুরনো ক্লাস। যদিও java.util.Date ক্লাসটি অনেক বছর ধরে ব্যবহৃত হয়ে আসছে, তবে এর কিছু সীমাবদ্ধতা এবং উন্নতি সম্ভব হওয়ায় Java 8 থেকে java.time প্যাকেজ (এটি LocalDate, LocalDateTime, ZonedDateTime ইত্যাদি ক্লাস সরবরাহ করে) তৈরি করা হয়েছে। তবুও, Date ক্লাসটি এখনও কিছু পুরনো কোড এবং অ্যাপ্লিকেশনে ব্যবহৃত হয়।
Date ক্লাসের মূল উদ্দেশ্য হল date এবং time সম্পর্কিত গাণিতিক কার্যাবলী পরিচালনা করা, যেমন সময়ের তুলনা, ফরম্যাটিং ইত্যাদি।
Date ক্লাসের মেথডসমূহ
java.util.Date ক্লাসে অনেক মেথড রয়েছে যা তারিখ এবং সময়ের সাথে সম্পর্কিত কাজ সম্পাদন করতে ব্যবহৃত হয়।
1. getTime()
- বর্ণনা: এটি
Dateঅবজেক্টের সময়কে milliseconds হিসেবে ফেরত দেয় (1970-01-01 00:00:00 UTC থেকে শুরু করে)। Syntax:
public long getTime();উদাহরণ:
Date date = new Date(); long millis = date.getTime(); System.out.println("Time in milliseconds: " + millis);
2. setTime(long time)
- বর্ণনা: এটি একটি নির্দিষ্ট milliseconds মান দিয়ে Date অবজেক্টের সময় সেট করে।
Syntax:
public void setTime(long time);উদাহরণ:
Date date = new Date(); date.setTime(1633024800000L); // Set time to a specific value System.out.println(date);
3. getYear()
- বর্ণনা: এটি Date অবজেক্টের বছর ফেরত দেয়, তবে 1900 থেকে বছরের সংখ্যা দেয়। অর্থাৎ, 2024 হলে এটি 124 ফেরত দেবে।
Syntax:
public int getYear();উদাহরণ:
Date date = new Date(); int year = date.getYear(); System.out.println("Year: " + (year + 1900)); // Adding 1900 to get the correct year
4. setYear(int year)
- বর্ণনা: এটি Date অবজেক্টের বছরের মান সেট করে, তবে 1900 থেকে মান গ্রহণ করে।
Syntax:
public void setYear(int year);উদাহরণ:
Date date = new Date(); date.setYear(124); // Setting year as 2024 System.out.println(date);
5. getMonth()
- বর্ণনা: এটি Date অবজেক্টের মাস ফেরত দেয়। মাসের মান 0 থেকে 11 পর্যন্ত থাকে, যেখানে 0 হল জানুয়ারি এবং 11 হল ডিসেম্বর।
Syntax:
public int getMonth();উদাহরণ:
Date date = new Date(); int month = date.getMonth(); System.out.println("Month: " + (month + 1)); // Adding 1 to get the correct month
6. setMonth(int month)
- বর্ণনা: এটি Date অবজেক্টের মাস সেট করে, তবে 0 থেকে 11 পর্যন্ত মান নিতে হয় (যেখানে 0 হল জানুয়ারি এবং 11 হল ডিসেম্বর)।
Syntax:
public void setMonth(int month);উদাহরণ:
Date date = new Date(); date.setMonth(5); // Setting month to June (June is 5) System.out.println(date);
7. getDate()
- বর্ণনা: এটি Date অবজেক্টের দিনটি ফেরত দেয়।
Syntax:
public int getDate();উদাহরণ:
Date date = new Date(); int day = date.getDate(); System.out.println("Day of the month: " + day);
8. setDate(int date)
- বর্ণনা: এটি Date অবজেক্টের দিনটি সেট করে।
Syntax:
public void setDate(int date);উদাহরণ:
Date date = new Date(); date.setDate(15); // Setting the date to 15th System.out.println(date);
9. getHours()
- বর্ণনা: এটি Date অবজেক্টের ঘণ্টা ফেরত দেয় (24-ঘণ্টার ফরম্যাটে)।
Syntax:
public int getHours();উদাহরণ:
Date date = new Date(); int hour = date.getHours(); System.out.println("Hour: " + hour);
10. setHours(int hours)
- বর্ণনা: এটি Date অবজেক্টের ঘণ্টাটি সেট করে (24-ঘণ্টার ফরম্যাটে)।
Syntax:
public void setHours(int hours);উদাহরণ:
Date date = new Date(); date.setHours(14); // Setting the hour to 14 (2 PM) System.out.println(date);
Date ক্লাসের সীমাবদ্ধতা
যদিও Date ক্লাসটি সময় এবং তারিখের জন্য অনেক গুরুত্বপূর্ণ কার্যাবলী সরবরাহ করে, তবে এর কিছু সীমাবদ্ধতা রয়েছে:
- Deprecated Methods:
- অনেক
Dateমেথড deprecated হয়েছে এবং আধুনিক Java Time API (যেমনjava.time.LocalDate,java.time.LocalDateTime) ব্যবহার করা প্রস্তাবিত হয়েছে।getYear(),getMonth(),getDate(),setYear(),setMonth()ইত্যাদি মেথডগুলো deprecated হয়েছে, কারণ এগুলির ব্যবহারে গাণিতিক সঠিকতা এবং সময়ের এক্সপ্রেশন সমস্যা হতে পারে।
- অনেক
- Year Representation Issue:
getYear()মেথড 1900 থেকে বছরের মান প্রদান করে, যা কিছুটা বিভ্রান্তিকর হতে পারে। উদাহরণস্বরূপ, 2024 হবে 124।
- Time Zone Issues:
Dateক্লাস Time Zone এর সমর্থন করতে পারে না, এবং এটি একটি নির্দিষ্ট সময় ও সময় অঞ্চলের মধ্যে সঠিক হিসাব করতে সক্ষম নয়। এতেZonedDateTimeবাLocalDateTimeব্যবহার করা ভালো।
- Limited Accuracy:
Dateক্লাসের সঠিকতা মাত্র milliseconds (মিলিসেকেন্ড) পর্যায়ে সীমাবদ্ধ। যদি আপনি nanoseconds বা আরো উচ্চ সঠিকতা চান, তবেInstant(Java 8 এবং পরবর্তী সংস্করণে) ব্যবহার করা উচিত।
- Not Thread-Safe:
Dateক্লাসটি থ্রেড-সেফ নয়, এবং একাধিক থ্রেড যদি একই Date অবজেক্ট অ্যাক্সেস করে তবে সমস্যা তৈরি হতে পারে।
- Lack of Flexibility:
Dateক্লাসটি খুব সাধারণ এবং সময়ের সাথে সম্পর্কিত অনেক কার্যাবলী (যেমন সময় যোগ করা, মাস পরিবর্তন, টাইমজোন হ্যান্ডলিং) সহজভাবে করতে পারে না। এই কারণে Java 8 এর পরjava.timeপ্যাকেজে নতুন সময় এবং তারিখ ক্লাস অন্তর্ভুক্ত করা হয়েছে, যা আরও উন্নত এবং নির্ভুল।
java.util.Date ক্লাসটি পুরনো কিন্তু শক্তিশালী একটি ক্লাস যা সময় এবং তারিখের জন্য ব্যবহৃত হয়। যদিও এর কিছু deprecated methods এবং সীমাবদ্ধতা রয়েছে, তবে এটি কিছু পুরনো অ্যাপ্লিকেশন এবং লাইব্রেরিতে এখনও ব্যবহৃত হয়। বর্তমানে, java.time প্যাকেজটি আধুনিক এবং উন্নত সময় এবং তারিখ সম্পর্কিত কার্যাবলী প্রদান করে, এবং এর মাধ্যমে সঠিকতার ক্ষেত্রে অনেক উন্নতি হয়েছে। Date ক্লাস ব্যবহার করার সময়ে এই সীমাবদ্ধতা এবং আধুনিক Java Time API ব্যবহার করার প্রয়োজনীয়তা মনে রাখা উচিত।
Calendar ক্লাসটি java.util প্যাকেজের একটি গুরুত্বপূর্ণ ক্লাস, যা সময় এবং তারিখ সম্পর্কিত কার্যাবলী সম্পাদন করতে ব্যবহৃত হয়। Calendar ক্লাসটি abstract হওয়ায়, এর বিভিন্ন বাস্তবায়ন রয়েছে, যেমন GregorianCalendar। এটি পুরনো Date ক্লাসের পরিবর্তে সময় এবং তারিখ সম্পর্কিত কাজ করার জন্য ব্যবহৃত হয় এবং সময় ব্যবস্থাপনায় আরও সুবিধাজনক।
Calendar ক্লাসের বেশ কিছু গুরুত্বপূর্ণ মেথড রয়েছে, যা সময় এবং তারিখের বিভিন্ন তথ্য (যেমন, বছর, মাস, দিন ইত্যাদি) পেতে, সেট করতে এবং পরিবর্তন করতে ব্যবহৃত হয়। এর মধ্যে get(), set(), add(), এবং roll() মেথডগুলো বিশেষভাবে গুরুত্বপূর্ণ।
1. get() মেথড
get() মেথডটি Calendar ক্লাসের জন্য নির্দিষ্ট একটি ক্ষেত্রের মান (যেমন, মাস, দিন, বছর ইত্যাদি) ফেরত দেয়। এটি একাধিক ক্ষেত্রের মান পেতে ব্যবহৃত হয়, যেমন Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH ইত্যাদি।
Syntax:
public int get(int field)
- field: এটি এমন একটি ক্ষেত্র যা আপনি পেতে চান, যেমন
Calendar.MONTH,Calendar.YEAR,Calendar.DAY_OF_MONTH, ইত্যাদি।
উদাহরণ:
import java.util.Calendar;
public class CalendarGetExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// Get current year, month, and day
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH); // Month is 0-based (0 = January)
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("Year: " + year);
System.out.println("Month: " + (month + 1)); // Adding 1 to convert to 1-based
System.out.println("Day: " + day);
}
}
Output:
Year: 2024
Month: 12
Day: 23
ব্যাখ্যা:
get()মেথডটি বর্তমান বছরের, মাসের এবং দিনের মান ফিরিয়ে দিয়েছে। এখানে মাস 0-based (অর্থাৎ জানুয়ারি ০, ফেব্রুয়ারি ১, ইত্যাদি) হওয়ায়, 1 যোগ করা হয়েছে।
2. set() মেথড
set() মেথডটি ব্যবহার করে আপনি Calendar এর কোনো নির্দিষ্ট ক্ষেত্রের মান সেট করতে পারেন। এটি field এবং তার মান (যেমন, Calendar.MONTH, Calendar.YEAR, Calendar.DAY_OF_MONTH) গ্রহণ করে।
Syntax:
public void set(int field, int value)
- field: সেট করার জন্য ক্ষেত্র (যেমন
Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTHইত্যাদি)। - value: সেই ক্ষেত্রের জন্য নির্দিষ্ট মান।
উদাহরণ:
import java.util.Calendar;
public class CalendarSetExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// Set the year to 2025 and the month to March (2, since months are 0-based)
calendar.set(Calendar.YEAR, 2025);
calendar.set(Calendar.MONTH, 2); // March
calendar.set(Calendar.DAY_OF_MONTH, 15); // 15th day of the month
System.out.println("Updated Date: " + calendar.getTime());
}
}
Output:
Updated Date: Sat Mar 15 14:21:43 IST 2025
ব্যাখ্যা:
set()মেথডটিCalendar.YEAR,Calendar.MONTH, এবংCalendar.DAY_OF_MONTHক্ষেত্রগুলো পরিবর্তন করে 2025 সালের মার্চ মাসের 15 তারিখে সেট করেছে।
3. add() মেথড
add() মেথডটি কোনো নির্দিষ্ট ক্ষেত্রের মানে অবধানযোগ্য পরিবর্তন (increment or decrement) করার জন্য ব্যবহৃত হয়। এটি time fields যেমন year, month, day, hour ইত্যাদির মান যোগ বা বিয়োগ করতে ব্যবহৃত হয়।
Syntax:
public void add(int field, int amount)
- field: এমন একটি ক্ষেত্র যার মান আপনি পরিবর্তন করতে চান (যেমন
Calendar.MONTH,Calendar.YEAR,Calendar.HOURইত্যাদি)। - amount: কতটা পরিবর্তন করতে চান। যদি মান positive হয়, তবে ক্ষেত্রটি বাড়ানো হবে এবং যদি মান negative হয়, তবে ক্ষেত্রটি কমানো হবে।
উদাহরণ:
import java.util.Calendar;
public class CalendarAddExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// Add 5 days to the current date
calendar.add(Calendar.DAY_OF_MONTH, 5);
// Subtract 2 months from the current month
calendar.add(Calendar.MONTH, -2);
System.out.println("New Date: " + calendar.getTime());
}
}
Output:
New Date: Mon Oct 23 14:21:43 IST 2023
ব্যাখ্যা:
add()মেথডটি 5 দিন যোগ করেছে এবং তারপর 2 মাস কমিয়ে দিয়েছে, ফলে ফলস্বরূপ তারিখটি 23 অক্টোবর, 2023 হয়েছে।
4. roll() মেথড
roll() মেথডটি time fields এর মান পরিবর্তন করে, তবে এটি overflow বা underflow এর ক্ষেত্রে আগের মান বজায় রাখে। উদাহরণস্বরূপ, আপনি month ক্ষেত্রটি 12 মাসে পরিবর্তন করলে এটি next year-এ চলে যাবে, কিন্তু roll() মেথডে মাস পরিবর্তন করলে, বছরের পরিবর্তন না হয়ে মাস একে বাড়ানো হবে।
Syntax:
public void roll(int field, int amount)
- field: এমন একটি ক্ষেত্র যার মান আপনি পরিবর্তন করতে চান (যেমন
Calendar.MONTH,Calendar.DAY_OF_MONTHইত্যাদি)। - amount: কতটা পরিবর্তন করতে চান।
উদাহরণ:
import java.util.Calendar;
public class CalendarRollExample {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// Add 3 months to the current month, but don't change the year
calendar.roll(Calendar.MONTH, 3);
System.out.println("Date after rolling months: " + calendar.getTime());
}
}
Output:
Date after rolling months: Tue Mar 23 14:21:43 IST 2024
ব্যাখ্যা:
roll()মেথডটি মাসের মান পরিবর্তন করেছে, তবে বছরের মান পরিবর্তন হয়নি। এখানে মার্চ 23, 2024 তারিখে চলে এসেছে।
সামগ্রিক পার্থক্য (Difference between add() and roll()):
| Feature | add() | roll() |
|---|---|---|
| Effect on Larger Units (like year) | Modifies the higher fields (e.g., year). | Does not modify higher fields (like year) in case of overflow. |
| Overflow Behavior | Causes overflow (e.g., 12 months = next year). | Prevents overflow; keeps the value within the field's valid range. |
| Usage | Use when you want to modify fields including overflow. | Use when you want to roll over a field without affecting other fields. |
Calendar ক্লাসের get(), set(), add(), এবং roll() মেথডগুলো date and time manipulation-এর জন্য অত্যন্ত গুরুত্বপূর্ণ।
get()এবংset()মেথডগুলির মাধ্যমে আমরা সময় এবং তারিখের মান পেতে এবং সেট করতে পারি।add()মেথডটি সময়ের বিভিন্ন ক্ষেত্রের মানে পরিবর্তন এনে overflow বা underflow ঘটায়, যখনroll()মেথডটি overflow ছাড়াই মান পরিবর্তন করে।
এই মেথডগুলির সাহায্যে সময় এবং তারিখের সঙ্গে কার্যকরভাবে কাজ করা যায়, যা বিভিন্ন অ্যাপ্লিকেশন বা প্রোগ্রামে সময় সম্পর্কিত হিসাবের জন্য অপরিহার্য।
java.util প্যাকেজে TimeZone এবং Locale ক্লাস দুটি গুরুত্বপূর্ণ ক্লাস, যা বিভিন্ন ধরনের টাইম জোন এবং লোকালাইজেশন (ভাষা, অঞ্চল) সম্পর্কিত কার্যাবলী পরিচালনা করতে ব্যবহৃত হয়। এই ক্লাসগুলি আপনাকে আপনার প্রোগ্রামটি বিশ্বব্যাপী ব্যবহারকারীদের জন্য আরও উপযোগী করে তোলে, কারণ আপনি টাইম জোন এবং লোকাল সেটিংস এর উপর ভিত্তি করে সময় এবং তারিখের সাথে কাজ করতে পারেন।
1. TimeZone Class
TimeZone ক্লাসটি বিশ্বের বিভিন্ন টাইম জোন পরিচালনা করার জন্য ব্যবহৃত হয়। এটি Date, Calendar, এবং ZonedDateTime এর মতো ক্লাসগুলির জন্য টাইম জোন সম্পর্কিত কার্যাবলী প্রদান করে। TimeZone এর মাধ্যমে আপনি একটি নির্দিষ্ট অঞ্চল বা টাইম জোন অনুযায়ী তারিখ ও সময় কনভার্ট করতে পারেন।
TimeZone Class এর ব্যবহারের উদাহরণ
import java.util.TimeZone;
import java.util.Date;
public class TimeZoneExample {
public static void main(String[] args) {
// Default TimeZone (system time zone)
TimeZone defaultTimeZone = TimeZone.getDefault();
System.out.println("Default TimeZone: " + defaultTimeZone.getID());
// Get the time zone for a specific location
TimeZone tzNewYork = TimeZone.getTimeZone("America/New_York");
System.out.println("Time Zone for New York: " + tzNewYork.getID());
// Get the time zone for UTC
TimeZone tzUTC = TimeZone.getTimeZone("UTC");
System.out.println("Time Zone for UTC: " + tzUTC.getID());
// Get the current date and time in a specific time zone
Date currentTime = new Date();
System.out.println("Current Date and Time in UTC: " + currentTime.toString());
}
}
Output:
Default TimeZone: Asia/Kolkata
Time Zone for New York: America/New_York
Time Zone for UTC: UTC
Current Date and Time in UTC: Mon Dec 23 12:48:24 UTC 2024
ব্যাখ্যা:
TimeZone.getDefault()মেথডটি সিস্টেমের ডিফল্ট টাইম জোন (যেটি আপনার কম্পিউটারের টাইম জোন অনুযায়ী হবে) ফেরত দেয়।TimeZone.getTimeZone(String id)মেথডের মাধ্যমে নির্দিষ্ট টাইম জোন যেমনAmerica/New_YorkবাUTCএর জন্য টাইম জোন পাওয়া যায়।Dateঅবজেক্টটি সিস্টেমের টাইম জোনে ভিত্তি করে তারিখ এবং সময় প্রদান করে।
TimeZone Class এর প্রধান মেথড:
getDefault(): সিস্টেমের ডিফল্ট টাইম জোন ফেরত দেয়।getTimeZone(String id): নির্দিষ্ট টাইম জোনের তথ্য ফেরত দেয়।getID(): টাইম জোনের আইডি ফেরত দেয় (যেমন "America/New_York")।getOffset(long date): একটি নির্দিষ্ট তারিখের জন্য টাইম জোনের UTC থেকে পার্থক্য ফেরত দেয়।
2. Locale Class
Locale ক্লাসটি ভাষা, দেশ, এবং সংস্কৃতি সম্পর্কিত তথ্য ধারণ করে। এটি মূলত বিভিন্ন ভাষা এবং অঞ্চলের জন্য ফরম্যাটিং এবং লোকালাইজেশন (যেমন তারিখ, সময়, সংখ্যা ফরম্যাট) এর কাজ করতে ব্যবহৃত হয়। আপনি Locale ব্যবহার করে সিস্টেমের লোকাল সেটিংস পরিবর্তন করতে এবং বিভিন্ন দেশের ভাষা, সংস্কৃতি অনুযায়ী অ্যাপ্লিকেশন কাস্টমাইজ করতে পারেন।
Locale Class এর ব্যবহারের উদাহরণ
import java.util.Locale;
public class LocaleExample {
public static void main(String[] args) {
// Create Locale object for a specific country and language
Locale localeUS = new Locale("en", "US");
System.out.println("Locale for US: " + localeUS.getDisplayName());
// Create Locale object for a specific language (French)
Locale localeFrance = new Locale("fr", "FR");
System.out.println("Locale for France: " + localeFrance.getDisplayName());
// Default system locale
Locale defaultLocale = Locale.getDefault();
System.out.println("Default Locale: " + defaultLocale.getDisplayName());
}
}
Output:
Locale for US: English (United States)
Locale for France: français (France)
Default Locale: English (United States)
ব্যাখ্যা:
Locale("en", "US")এবংLocale("fr", "FR")দ্বারা নির্দিষ্ট দেশের এবং ভাষার লোকাল তৈরি করা হয়েছে।getDisplayName()মেথড ব্যবহার করে একটি লোকাল অবজেক্টের পূর্ণ নাম (ভাষা এবং দেশসহ) প্রদর্শন করা হয়েছে।Locale.getDefault()মেথডটি সিস্টেমের ডিফল্ট লোকাল ফেরত দেয়।
Locale Class এর প্রধান মেথড:
getDefault(): সিস্টেমের ডিফল্ট লোকাল ফেরত দেয়।getDisplayName(): লোকাল অবজেক্টের নাম (ভাষা এবং দেশ) প্রদান করে।getLanguage(): লোকালের ভাষা কোড প্রদান করে (যেমন "en" বা "fr")।getCountry(): লোকালের দেশ কোড প্রদান করে (যেমন "US" বা "FR")।
TimeZone এবং Locale এর ব্যবহার একত্রে:
আপনি যখন TimeZone এবং Locale একসাথে ব্যবহার করেন, তখন আপনি নির্দিষ্ট টাইম জোন এবং লোকাল সেটিংসের ভিত্তিতে তারিখ ও সময় ফরম্যাট করতে পারেন।
উদাহরণ: TimeZone এবং Locale সহ Date Format
import java.util.*;
import java.text.*;
public class TimeZoneLocaleExample {
public static void main(String[] args) throws ParseException {
// Set Locale and TimeZone
Locale locale = new Locale("en", "US");
TimeZone timeZone = TimeZone.getTimeZone("America/New_York");
// Create a Calendar instance with the specific locale and time zone
Calendar calendar = Calendar.getInstance(locale, timeZone);
// Set a specific date
calendar.set(2024, Calendar.DECEMBER, 25, 10, 30);
// Format the date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", locale);
sdf.setTimeZone(timeZone);
System.out.println("Formatted Date (New York, US): " + sdf.format(calendar.getTime()));
}
}
Output:
Formatted Date (New York, US): 2024-12-25 10:30:00
ব্যাখ্যা:
- এখানে
TimeZoneএবংLocaleএকত্রে ব্যবহার করা হয়েছে।Calendar.getInstance()মেথডের মাধ্যমে নির্দিষ্ট টাইম জোন এবং লোকাল সেটিংস অনুযায়ী সময় তৈরি করা হয়েছে। SimpleDateFormatএর মাধ্যমে নির্দিষ্ট টাইম জোন এবং লোকাল অনুযায়ী তারিখ এবং সময় ফরম্যাট করা হয়েছে।
TimeZoneএবংLocaleক্লাসগুলি ব্যবহার করে আপনি টাইম জোন এবং লোকাল সেটিংসের উপর ভিত্তি করে সময় এবং তারিখ সম্পর্কিত কাজগুলো খুব সহজে এবং সঠিকভাবে করতে পারবেন। এগুলির মাধ্যমে আপনি একটি worldwide application তৈরি করতে সক্ষম হবেন, যা বিভিন্ন টাইম জোন এবং ভাষার ভিত্তিতে ব্যবহারকারীর জন্য নির্দিষ্ট তথ্য প্রদান করবে।TimeZoneক্লাস সময়ের ব্যবধান এবং টাইম জোন সম্পর্কিত কাজগুলো সহজ করে এবংLocaleক্লাস ভাষা, সংস্কৃতি এবং অঞ্চলের ওপর ভিত্তি করে অ্যাপ্লিকেশন কাস্টমাইজেশন করতে সহায়তা করে।
Read more