CodeGym /Java Course /মডিউল 1 /ক্যালেন্ডার ক্লাস

ক্যালেন্ডার ক্লাস

মডিউল 1
লেভেল 27 , পাঠ 1
বিদ্যমান

1. Dateক্লাস থেকে Calendarক্লাসে পরিবর্তন করা

প্রোগ্রামাররা Dateক্লাসটিকে এর সরলতা এবং ইউনিক্স মানগুলির জন্য সমর্থনের জন্য পছন্দ করেছিল, কিন্তু আপনি জানেন, প্রতিটি গোলাপের কাঁটা রয়েছে।

প্রোগ্রামাররা একটি "স্মার্ট" Dateক্লাস চেয়েছিল। এবং তারা ক্লাসের আকারে যা চেয়েছিল তা পেয়েছে Calendar। এটি শুধুমাত্র তারিখগুলি সঞ্চয় করার জন্য নয়, তারিখগুলির সাথে কঠিন ক্রিয়াকলাপ সম্পাদন করার একটি উপায় হিসাবে কল্পনা করা হয়েছিল।

ক্লাসের পুরো নাম Calendarjava.util.Calendar। আপনি যদি আপনার কোডে এটি ব্যবহার করার সিদ্ধান্ত নেন তবে এটিকে একটি আমদানি বিবৃতিতে যোগ করতে ভুলবেন না।

আপনি এই কমান্ড দিয়ে একটি Calendarবস্তু তৈরি করতে পারেন:

Calendar date = Calendar.getInstance();

ক্লাসের স্ট্যাটিক getInstance()পদ্ধতি বর্তমান তারিখের সাথে শুরু করা Calendarএকটি বস্তু তৈরি করে । Calendarআপনি যে ক্যালেন্ডারটি চান তা প্রোগ্রাম চালানো কম্পিউটারের সেটিংসের উপর ভিত্তি করে তৈরি করা হবে।

অথবা আরও সঠিকভাবে, আপনি যে ক্যালেন্ডারটি পান... এর কারণ পৃথিবীর মানুষ একটি একক ক্যালেন্ডারে সীমাবদ্ধ নয়। পরিবর্তে, তারা অনেক ব্যবহার করে। আর এদের প্রায় প্রত্যেকেই কোনো না কোনো ধর্ম বা দেশের সঙ্গে যুক্ত। ক্লাস Calendarতাদের মধ্যে 3টি সমর্থন করে:

ক্যালেন্ডার বর্ণনা
গ্রেগরিয়ান ক্যালেন্ডার খ্রিস্টান গ্রেগরিয়ান ক্যালেন্ডার
বৌদ্ধ ক্যালেন্ডার বৌদ্ধ ক্যালেন্ডার
জাপানি ইম্পেরিয়াল ক্যালেন্ডার জাপানি ইম্পেরিয়াল ক্যালেন্ডার

তবে চীনা এবং আরবি ক্যালেন্ডারও রয়েছে। মূলত, সময়ের সাথে কাজ করা যতটা সহজ মনে হয় ততটা সহজ নয়।

চীনা ক্যালেন্ডারে, এই পাঠটি লেখার সময় আনুষ্ঠানিকভাবে বছরটি 4716। এবং মুসলিম ক্যালেন্ডার অনুযায়ী, বছর 1398. বড় পৃথিবীতে স্বাগতম, আমার প্রোগ্রামার বন্ধু।

2. একটি ক্যালেন্ডার অবজেক্ট তৈরি করা

আমরা গ্রেগরিয়ান ক্যালেন্ডার ব্যবহার করব, যেহেতু এটি বিশ্বের সবচেয়ে সাধারণ। অন্তত যতক্ষণ না চীন ওরাকলকে কিনে নেয় এবং চীনা ক্যালেন্ডারকে প্রধান করে তোলে।

আপনি এই মত একটি বিবৃতি ব্যবহার করে যেকোনো তারিখের সাথে একটি ক্যালেন্ডার অবজেক্ট তৈরি করতে পারেন:

Calendar date = new GregorianCalendar(year, month, day);

GregorianCalendarহ্যাঁ, আপনাকে প্রতিবার লিখতে হবে । এর পরিবর্তে Calendar, আপনি লিখতে পারেন GregorianCalendar- এটিও কাজ করবে। কিন্তু লেখা শুধু Calendarছোট।

বছরটি অবশ্যই সম্পূর্ণ লিখতে হবে, যেমন আপনি 2019 এর পরিবর্তে 19 লিখতে পারবেন না। মাসগুলি এখনও শূন্য থেকে গণনা করা হয়। কিন্তু আগের মতোই শূন্য থেকে মাসের দিনগুলো গণনা করা হয় না। নের্ডস !

সময় এবং তারিখ সেট করতে, আপনাকে অতিরিক্ত আর্গুমেন্ট হিসাবে সময় পাস করতে হবে:

... = new GregorianCalendar(year, month, day, hours, minutes, seconds);

এমনকি প্রয়োজনে আপনি মিলিসেকেন্ডেও পাস করতে পারেন। সেকেন্ডের সংখ্যার পরের প্যারামিটার।

3. পর্দায় একটি ক্যালেন্ডার বস্তু প্রদর্শন করা হচ্ছে

আপনি যদি স্ক্রিনে কেবল একটি ক্যালেন্ডার অবজেক্ট মুদ্রণ করেন তবে আপনি ফলাফলটি নিয়ে খুব খুশি হবেন না।

কোড
Calendar calendar = new GregorianCalendar(2019, 03, 12);
System.out.println(calendar);
কনসোল আউটপুট
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Helsinki",offset=7200000,dstSavings=3600000,useDaylight=true,transitions=118,lastRule=java.util.SimpleTimeZone[id=Europe/Helsinki,offset=7200000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=2019,MONTH=3,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=12,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?]

এখানে মনে রাখতে হবে যে একটি ক্যালেন্ডার একটি ক্যালেন্ডার, একটি তারিখ নয় : এটিতে সমস্ত ধরণের সেটিংস রয়েছে যা সমস্ত পর্দায় প্রদর্শিত হবে।

একটি ক্যালেন্ডার প্রদর্শন করার জন্য একটি বস্তু ব্যবহার করা সঠিক হবে SimpleDateFormat, কিন্তু যতক্ষণ না আমরা এটি অধ্যয়ন করি, আপনি এই লাইফ হ্যাকটি ব্যবহার করতে পারেন।

Date date = calendar.getTime();

একটি Calendarবস্তুকে সহজেই একটি বস্তুতে রূপান্তর করা যেতে পারে Dateএবং আপনি ইতিমধ্যেই জানেন কিভাবে একটি Dateবস্তু প্রদর্শন করতে হয়। Calendarআপনি একটি বস্তু রূপান্তর করতে এই মত কোড ব্যবহার করতে পারেন Date:

পদ্ধতি ব্যবহার করে getTime():

কোড কনসোল আউটপুট
Calendar calendar = new GregorianCalendar(2019, 03, 12);
System.out.println(calendar.getTime());
 Fri Apr 12 00:00:00 EEST 2019

ব্যাপারটা একেবারেই আলাদা, তাই না?

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

একটি তারিখের একটি নির্দিষ্ট উপাদান পেতে (যেমন বছর, মাস, ...), ক্লাসের পদ্ধতি Calendarরয়েছে get()। এটি একটি একক পদ্ধতি, তবে এর পরামিতি রয়েছে:

int month = calendar.get(Calendar.MONTH);

যেখানে calendarএকটি Calendarপরিবর্তনশীল, এবং MONTHক্লাসের একটি ধ্রুবক ক্ষেত্র Calendar

আপনি Calendarপদ্ধতিতে একটি যুক্তি হিসাবে ক্লাসের ধ্রুবক ক্ষেত্রগুলির একটি পাস করেন getএবং ফলাফল হিসাবে আপনি পছন্দসই মান পান।

উদাহরণ

কোড বর্ণনা
Calendar calendar = Calendar.getInstance();

int era = calendar.get(Calendar.ERA);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);

int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);


যুগ (সাধারণ যুগের আগে বা পরে)
বছরের
মাসের
দিন মাসের

দিন সপ্তাহের
ঘন্টা
মিনিট
সেকেন্ড

তারিখের একটি উপাদান পরিবর্তন করতে, setপদ্ধতিটি ব্যবহার করুন:

calendar.set(Calendar.MONTH, value);

যেখানে calendarএকটি Calendarপরিবর্তনশীল, এবং MONTHক্লাসের একটি ধ্রুবক ক্ষেত্র Calendar

পদ্ধতির সাথে কাজ করার সময় set, আপনি প্রথম আর্গুমেন্ট হিসাবে ক্লাসের ধ্রুবক ক্ষেত্রগুলির একটি Calendarএবং দ্বিতীয় যুক্তি হিসাবে নতুন মান পাস করেন।

উদাহরণ

কোড বর্ণনা
Calendar calendar = new GregorianCalendar();

calendar.set(Calendar.YEAR, 2019);
calendar.set(Calendar.MONTH, 6);
calendar.set(Calendar.DAY_OF_MONTH, 4);
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 0);

System.out.println(calendar.getTime());


বছর = 2019
মাস = জুলাই (0 থেকে সংখ্যাযুক্ত)
4র্থ দিন
ঘন্টা
মিনিট
সেকেন্ড

5. ক্লাসের Calendarধ্রুবক

ক্লাসের ধ্রুবক ক্ষেত্রগুলি Calendarতারিখের উপাদানগুলির নামকরণের জন্য সীমাবদ্ধ নয়। প্রতিটি অনুষ্ঠানের জন্য ক্ষেত্র আছে বলে মনে হচ্ছে।

Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);

উদাহরণস্বরূপ, মাসগুলি উল্লেখ করার জন্য ধ্রুবক ক্ষেত্র রয়েছে:

এবং সপ্তাহের দিনগুলিও:

Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
   System.out.println("It's Friday");
}

আমরা সবকিছু তালিকাভুক্ত করব না। আমরা চাই না আপনি যদি কোডে এইরকম ধ্রুবক দেখতে পান তাহলে আপনি অবাক হন।

ধ্রুবক ব্যবহার করা কোডটিকে আরও পঠনযোগ্য করে তোলে, এই কারণেই প্রোগ্রামাররা সেগুলি ব্যবহার করে। এবং পঠনযোগ্যতা উন্নত করতে মাসগুলিকে শূন্য থেকেও গণনা করা হয়। অথবা না.

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

ক্লাসের Calendarএকটি পদ্ধতি রয়েছে যা আপনাকে আরও বুদ্ধিমান উপায়ে একটি তারিখে কাজ করতে দেয়। উদাহরণস্বরূপ, আপনি একটি তারিখে একটি বছর, একটি মাস বা বেশ কয়েকটি দিন যোগ করতে পারেন। অথবা তাদের দূরে নিয়ে যান। এই পদ্ধতি বলা হয় add(). এটির সাথে কাজ করা এইরকম দেখাচ্ছে:

calendar.add(Calendar.MONTH, value);

যেখানে calendarএকটি Calendarপরিবর্তনশীল, এবং MONTHক্লাসের একটি ধ্রুবক ক্ষেত্র Calendar

পদ্ধতির সাথে কাজ করার সময় add, আপনি ক্লাসের ধ্রুবক ক্ষেত্রগুলির একটিকে Calendarপ্রথম আর্গুমেন্ট হিসাবে এবং দ্বিতীয় আর্গুমেন্ট হিসাবে পাস করেন — নতুন মান যোগ করা হবে।

এটি আরেকটি বুদ্ধিমান পদ্ধতি। আসুন দেখি এটি কতটা স্মার্ট:

কোড
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.add(Calendar.DAY_OF_MONTH, 2);
System.out.println(calendar.getTime());
কনসোল আউটপুট
Fri Mar 01 00:00:00 EET 2019

এই পদ্ধতিটি বুঝতে পারে যে 2019 সালের ফেব্রুয়ারিতে মাত্র 28 দিন রয়েছে, তাই ফলাফলের তারিখটি 1 মার্চ।

এখন 2 মাস নিয়ে যাওয়া যাক! আমরা কি পেতে হবে? ডিসেম্বর 27, 2018! এখন চেক করা যাক.

একটি অপারেশন করার জন্য যা পূর্ববর্তী তারিখে পরিণত হয়, আপনাকে পদ্ধতিতে একটি নেতিবাচক মান পাস করতে হবে add():

কোড
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.add(Calendar.MONTH, -2);
System.out.println(calendar.getTime());
কনসোল আউটপুট
Thu Dec 27 00:00:00 EET 2018

এটা কাজ করে!

এই পদ্ধতিটি মাস এবং লিপ বছরের বিভিন্ন দৈর্ঘ্যের হিসাব করে। সর্বোপরি, একটি দুর্দান্ত পদ্ধতি। তারিখের সাথে কাজ করে এমন বেশিরভাগ প্রোগ্রামারদের এটিই প্রয়োজন।

7. তারিখের ঘূর্ণায়মান উপাদান

কিন্তু কখনও কখনও এমন পরিস্থিতি হয় যখন আমরা এই স্মার্ট আচরণটি চাই না, যেমন আপনি অন্য সবকিছু পরিবর্তন না করে তারিখের এক অংশে কিছু করতে চান।

ক্লাসে এর জন্য Calendarবিশেষ পদ্ধতি রয়েছে । roll()এটির স্বাক্ষরটি পদ্ধতির মতোই add(), তবে এই পদ্ধতিটি তারিখের শুধুমাত্র একটি উপাদান পরিবর্তন করে, বাকিগুলি অপরিবর্তিত রেখে।

উদাহরণ:

কোড
Calendar calendar = new GregorianCalendar(2019, Calendar.FEBRUARY, 27);
calendar.roll(Calendar.MONTH, -2);
System.out.println(calendar.getTime());
কনসোল আউটপুট
Fri Dec 27 00:00:00 EET 2019

আমরা মাস পরিবর্তন করেছি, কিন্তু বছর এবং তারিখ অপরিবর্তিত রয়েছে।


মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION