ওহে! আজ আমরা একটি নতুন ডেটা টাইপ নিয়ে কাজ শুরু করব যা আমরা আগে পাইনি, যথা, তারিখ।
আমি মনে করি না যে তারিখ কী তা ব্যাখ্যা করার দরকার আছে। :) নীতিগতভাবে, আমরা একটি সাধারণ জাভা স্ট্রিং-এ বর্তমান তারিখ এবং সময় সংরক্ষণ করতে পারি।
এর মানে এই নয় যে এই পদ্ধতিগুলি একেবারেই ব্যবহার করা যাবে না। আপনি যদি একটি IDE-তে অবচয়িত পদ্ধতি ব্যবহার করে কোড চালানোর চেষ্টা করেন, তাহলে এটি সম্ভবত কাজ করবে উদাহরণস্বরূপ, অবনমন পদ্ধতি বিবেচনা করুন , যা একটি বস্তুর
ক্লাসের বেশিরভাগ পদ্ধতি উন্নত এবং বর্ধিত শ্রেণীতে
একটি তারিখ হল কয়েকটি সংখ্যা যা একটি নির্দিষ্ট সময়ের ব্যবধান নির্দেশ করে। একটি ক্যালেন্ডার একটি সম্পূর্ণ সিস্টেম যা আপনাকে তারিখের সাথে অনেক কিছু করতে দেয়। :) আপনি বস্তুটি প্রদর্শন করার চেষ্টা করলে এটি প্রচুর পরিমাণে স্পষ্ট হয়

public class Main {
public static void main(String[] args) {
String date = "June 11, 2018";
System.out.println(date);
}
}
কিন্তু এই পদ্ধতির অনেক অসুবিধা আছে। ক্লাসটি String
পাঠ্যের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে এবং এর পদ্ধতিগুলি এই কাজের জন্য উপযুক্ত। যদি আমাদের কোন উপায়ে একটি তারিখ ম্যানিপুলেট করার প্রয়োজন হয় (উদাহরণস্বরূপ 2 ঘন্টা যোগ করুন), String
এত ভাল কাজ করে না। অথবা যদি আমরা বর্তমান তারিখ এবং সময় প্রদর্শন করতে চাই যখন প্রোগ্রামটি কম্পাইল করা হয়। String
এখানেও সাহায্য করে না: যখন আপনি কোডটি লিখবেন এবং এটি চালাবেন, সময় পরিবর্তিত হবে এবং কনসোল ভুল তথ্য প্রদর্শন করবে। এই কারণেই জাভার নির্মাতারা তারিখ এবং সময় নিয়ে কাজ করার জন্য বেশ কয়েকটি ক্লাস প্রদান করেছেন। এর মধ্যে প্রথমটি হলjava.util.Date
তারিখ ক্লাস
আমরা এর পুরো নাম উল্লেখ করেছি, কারণ অন্য একটি জাভা প্যাকেজেরjava.sql.Date
ক্লাস রয়েছে। তাদের মিশ্রিত করবেন না! এটি সম্পর্কে আপনার প্রথম যে জিনিসটি জানতে হবে তা হল এটি তারিখটিকে 1 জানুয়ারী, 1970 সাল থেকে অতিবাহিত হওয়া মিলিসেকেন্ডের সংখ্যা হিসাবে সংরক্ষণ করে৷ এই টাইম সিস্টেমের এমনকি নিজস্ব নামও রয়েছে: " ইউনিক্স-টাইম " একটি বরং আকর্ষণীয় পদ্ধতি, হবে' তুমি রাজি না? :) মনে রাখার মতো দ্বিতীয় জিনিসটি হল: আপনি যদি Date
ডিফল্ট কনস্ট্রাক্টর ব্যবহার করে একটি অবজেক্ট তৈরি করেন, ফলাফলটি বস্তুটি তৈরি হওয়ার মুহূর্তে বর্তমান তারিখ এবং সময়কে প্রতিনিধিত্ব করে । মনে রাখবেন যে আমরা বলেছিলাম যে একটি তারিখ হিসাবে প্রতিনিধিত্ব করা String
এই ধরনের একটি টাস্ক সঙ্গে সংগ্রাম করবে? ক্লাস Date
এটি সহজে পরিচালনা করে।
public class Main {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date);
}
}
এই কোডটি বেশ কয়েকবার চালান, এবং আপনি বারবার সময় পরিবর্তন দেখতে পাবেন। :) এটি সম্ভব কারণ সময় মিলিসেকেন্ড হিসাবে সংরক্ষণ করা হয়: তারা সময়ের অত্যন্ত ছোট একক, তাই ফলাফলগুলি অত্যন্ত নির্ভুল। ক্লাস Date
আরেকটি কনস্ট্রাক্টর: আপনি 00:00 জানুয়ারী 1, 1970 তারিখ থেকে প্রয়োজনীয় তারিখে মিলিসেকেন্ডের সঠিক সংখ্যা পাস করতে পারেন এবং একটি সংশ্লিষ্ট তারিখ অবজেক্ট তৈরি করা হবে:
public class Main {
public static void main(String[] args) {
Date date = new Date(1212121212121L);
System.out.println(date);
}
}
কনসোল আউটপুট: শুক্র মে 30 04:20:12 GMT 2008 আমরা 30 মে, 2008 পাই৷ "শুক্র" সপ্তাহের দিন নির্দেশ করে (শুক্রবার, দুহ), এবং GMT হল সময় অঞ্চল (গ্রিনউইচ গড় সময়)। মিলিসেকেন্ডগুলিকে s হিসাবে পাস করা হয় long
, কারণ মিলিসেকেন্ডের সংখ্যা সাধারণত একটি int
. সুতরাং, তারিখের সাথে আমাদের কী অপারেশন করতে হবে? ওয়েল, সবচেয়ে সুস্পষ্ট, অবশ্যই, তুলনা . একটি তারিখ আগে না পরে আসে তা নির্ধারণ করা। এটা বিভিন্নভাবে করা সম্ভব। উদাহরণস্বরূপ, আপনি Date.getTime()
পদ্ধতিটিকে কল করতে পারেন, যা 1 জানুয়ারী, 1970-এর মধ্যরাত থেকে অতিবাহিত হওয়া মিলিসেকেন্ডের সংখ্যা প্রদান করে। শুধু দুটি তারিখ অবজেক্টে কল করুন এবং ফলাফলের তুলনা করুন:
public class Main {
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date();
System.out.println((date1.getTime() > date2.getTime())?
"date1 is later than date2" : "date1 is earlier than date2");
}
}
আউটপুট: date1 date2 এর চেয়ে আগের কিন্তু একটি আরও সুবিধাজনক উপায় আছে, যেমন তারিখ ক্লাস দ্বারা প্রদত্ত বিশেষ পদ্ধতি ব্যবহার করে: before()
, after()
এবং equals()
। তাদের সব একটি বুলিয়ান মান ফেরত. পদ্ধতিটি before()
পরীক্ষা করে যে আমাদের তারিখটি একটি যুক্তি হিসাবে পাস করা তারিখের চেয়ে আগের কিনা:
public class Main {
public static void main(String[] args) throws InterruptedException {
Date date1 = new Date();
Thread.sleep(2000);// Suspend the program for 2 seconds
Date date2 = new Date();
System.out.println(date1.before(date2));
}
}
কনসোল আউটপুট: সত্য একইভাবে, after()
পদ্ধতিটি পরীক্ষা করে যে আমাদের তারিখটি একটি যুক্তি হিসাবে পাস করা তারিখের পরে কিনা:
public class Main {
public static void main(String[] args) throws InterruptedException {
Date date1 = new Date();
Thread.sleep(2000);// Suspend the program for 2 seconds
Date date2 = new Date();
System.out.println(date1.after(date2));
}
}
কনসোল আউটপুট: মিথ্যা আমাদের উদাহরণগুলিতে, আমরা 2 সেকেন্ডের জন্য "প্রোগ্রামটিকে ঘুমাতে রাখি", যাতে দুটি তারিখ আলাদা হওয়ার গ্যারান্টি দেওয়া হয়। দ্রুত কম্পিউটারে, তৈরি date1
এবং এর মধ্যে সময় date2
এক মিলিসেকেন্ডেরও কম হতে পারে, যার ফলে before()
এবং উভয়ই after()
মিথ্যা হয়ে যায়। কিন্তু এই ক্ষেত্রে, equals()
পদ্ধতি সত্য ফিরে আসবে! সর্বোপরি, এটি প্রতিটি তারিখের জন্য জানুয়ারী 1, 1970-এ 00:00 থেকে মিলিসেকেন্ডের সংখ্যার তুলনা করে । বস্তুগুলিকে সমান হিসাবে বিবেচনা করা হয় শুধুমাত্র যদি তারা মিলিসেকেন্ডের সাথে মেলে :
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date();
System.out.println(date1.getTime());
System.out.println(date2.getTime());
System.out.println(date1.equals(date2));
}
এখানে আরেকটি বিষয় আপনাকে মনোযোগ দিতে হবে। আপনি যদি ওরাকলDate
ওয়েবসাইটে ক্লাসের জন্য ডকুমেন্টেশন খোলেন , আপনি দেখতে পাবেন যে এর অনেকগুলি পদ্ধতি এবং কনস্ট্রাক্টরকে অবচ্যুত হিসাবে চিহ্নিত করা হয়েছে (অর্থাৎ ব্যবহারের জন্য প্রস্তাবিত নয়)। এখানে জাভা এর নির্মাতাদের ক্লাসের কিছু অংশ সম্পর্কে যা বলা হয়েছে তা অবলোচিত হয়েছে:
"একটি প্রোগ্রাম উপাদান @Deprecated টীকা করা এমন কিছু যা প্রোগ্রামারদের ব্যবহার করার জন্য সুপারিশ করা হয় না, সাধারণত কারণ এটি বিপজ্জনক, বা একটি ভাল বিকল্প আছে।" |
Date.getHours()
সাথে যুক্ত ঘন্টার সংখ্যা প্রদান করে ।Date
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1.getHours());
}
আপনি যদি কোডটি 14:21 (2:21 PM) এ শুরু করেন, তাহলে এটি 14 নম্বরটি প্রদর্শন করবে। আপনি দেখতে পাচ্ছেন, অপ্রচলিত পদ্ধতিটি ক্রস করা হয়েছে, কিন্তু এটি এখনও কাজ করে। তাদের ব্যবহার করে বিদ্যমান কোডের বিশাল বডি ভাঙতে না দেওয়ার জন্য এই পদ্ধতিগুলি সরানো হয় না। অন্য কথায়, এই পদ্ধতিগুলি "ভাঙা" বা "সরানো" নয়। এগুলি কেবল ব্যবহারের জন্য সুপারিশ করা হয় না কারণ একটি আরও সুবিধাজনক বিকল্প উপলব্ধ। ঘটনাক্রমে, ডকুমেন্টেশন বিশেষভাবে এই বিকল্প উল্লেখ করে:

Date
স্থানান্তরিত হয়েছে । Calendar
আমরা পরবর্তী ক্লাসের সাথে পরিচিত হব। :)
ক্যালেন্ডার ক্লাস
JDK 1.1 একটি নতুন ক্লাস চালু করেছে:Calendar
. এটি জাভাতে তারিখগুলির সাথে কাজ করা আগের তুলনায় কিছুটা সহজ করে তুলেছে। Calendar
আমরা যে ক্লাসের সাথে কাজ করব তার একমাত্র বাস্তবায়ন হল GregorianCalendar
ক্লাস। এটি গ্রেগরিয়ান ক্যালেন্ডার প্রয়োগ করে, যা বিশ্বের বেশিরভাগ দেশ পালন করে। এর প্রধান সুবিধা হল এটি আরও সুবিধাজনক বিন্যাসে তারিখের সাথে কাজ করতে পারে। উদাহরণস্বরূপ, এটি করতে পারে:
- বর্তমান তারিখে একটি মাস বা দিন যোগ করুন
- বছরটি একটি অধিবর্ষ কিনা তা পরীক্ষা করুন;
- তারিখের পৃথক উপাদানগুলি ফেরত দিন (উদাহরণস্বরূপ, পুরো তারিখ থেকে মাসের সংখ্যা বের করুন)
- এটিতে ধ্রুবকগুলির একটি খুব সুবিধাজনক সিস্টেমও রয়েছে (যার অনেকগুলি আমরা নীচে দেখব)।
Calendar
হল এর ক্যালেন্ডার।ERA ধ্রুবক: আপনি সাধারণ যুগের (BC - খ্রিস্টের আগে) বা সাধারণ যুগের (AD - Anno Domini) আগে একটি তারিখ নির্দেশ করতে পারেন। আসুন উদাহরণ সহ এই সব তাকান. আসুন calendar
25 জানুয়ারী, 2017 তারিখের সাথে একটি বস্তু তৈরি করি:
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2017, 0 , 25);
}
ক্লাসে Calendar
(পাশাপাশি Date
সেই বিষয়ের জন্য ক্লাস), মাসগুলি শূন্য থেকে শুরু হয় , তাই আমরা দ্বিতীয় যুক্তি হিসাবে 0 নম্বরটি পাস করি। ক্লাসের সাথে কাজ করার সময় Calendar
, এটি বোঝা গুরুত্বপূর্ণ যে এটি শুধুমাত্র একটি ক্যালেন্ডার , একটি পৃথক তারিখ নয়। 
Calendar
: আউটপুট: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/London",offset=0,dstSavings=0,useDaylight= false,transitions=79,lastRule=null],FirstDayOfWeek=2,minimalDaysInFirstWeek=1,ERA=?,YEAR=2017,MONTH=0,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=?,DAY_OF_MONTH=22_OF_MONTH=? ,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=?,ZONE_OFFSET=?,DST_OFFSET=?] দেখুন আপনি কত তথ্য পান ! toString()
একটি ক্যালেন্ডারে একগুচ্ছ বৈশিষ্ট্য থাকে যা একটি সাধারণ তারিখে থাকে না এবং সেগুলি সবই প্রদর্শিত হয় ( ক্লাসে পদ্ধতিটিএভাবেইCalendar
)। আপনি যদি ক্যালেন্ডার থেকে একটি সাধারণ তারিখ পেতে চান, যেমন একটিDate
বস্তু, ব্যবহার করুনCalendar.getTime()
পদ্ধতি (নামটি সবচেয়ে যৌক্তিক নয়, তবে আপনি কী করতে পারেন?):
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2017, 0 , 25);
Date date = calendar.getTime();
System.out.println(date);
}
আউটপুট: বুধবার জানুয়ারী 25 00:00:00 GMT 2017 এখন আমরা ক্যালেন্ডারটি নিয়েছি এবং একটি সাধারণ তারিখে "কমিয়েছি"। আরো এগিয়ে যাক. তাদের সংখ্যা অনুসারে মাস নির্ধারণের পাশাপাশি, আপনি Calendar
ক্লাসের ধ্রুবক ক্ষেত্রের মান ব্যবহার করতে পারেন । এই ধ্রুবকগুলি একটি প্রিসেট মান সহ ক্লাসের স্ট্যাটিক ক্ষেত্র Calendar
যা পরিবর্তন করা যায় না। এটি আসলে একটি আরও ভাল বিকল্প, কারণ সেগুলি ব্যবহার করলে আপনার কোডের পাঠযোগ্যতা উন্নত হয়।
public static void main(String[] args) {
GregorianCalendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
}
Calendar.JANUARY হল একটি ধ্রুবক যা বছরের মাসগুলিকে প্রতিনিধিত্ব করে৷ এই নামযুক্ত ধ্রুবকগুলি ব্যবহার করে, কেউ ভুলে যাবে না, উদাহরণস্বরূপ, 3 নম্বর মানে এপ্রিল, এবং তৃতীয় মাস নয়, যাকে আমরা মার্চ বলতে চাই। শুধু ক্যালেন্ডার লিখুন।এপ্রিল , এবং আপনার কাজ শেষ। set()
:) সমস্ত ক্যালেন্ডার ক্ষেত্র (সংখ্যা, মাস, মিনিট, সেকেন্ড, ইত্যাদি) পদ্ধতিব্যবহার করে আলাদাভাবে নির্দিষ্ট করা যেতে পারে। এই পদ্ধতিটি খুবই সুবিধাজনক, কারণCalendar
ক্লাসে প্রতিটি ক্ষেত্রের জন্য একটি ধ্রুবক রয়েছে এবং ফলাফল কোডটি পড়া খুব সহজ। শেষ উদাহরণে, আমরা একটি তারিখ তৈরি করেছি, কিন্তু এটির জন্য একটি সময় সেট করিনি। 19:42:12 সময় নির্ধারণ করা যাক
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, 2017);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 25);
calendar.set(Calendar.HOUR_OF_DAY, 19);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
System.out.println(calendar.getTime());
}
আউটপুট: বুধবার জানুয়ারী 25 19:42:12 GMT 2017 আমরা পদ্ধতিকে বলি set()
, একটি ধ্রুবক পাস করা (যে ক্ষেত্রে আমরা পরিবর্তন করতে চাই তার উপর নির্ভর করে) এবং ক্ষেত্রের জন্য নতুন মান। দেখা যাচ্ছে যে এই set()
পদ্ধতিটি এক ধরণের "সুপার-সেটার" যেটি জানে কিভাবে কেবল একটি ক্ষেত্রের জন্য নয়, অনেক ক্ষেত্রের জন্য মান সেট করতে হয়। :) ক্লাস মান যোগ এবং বিয়োগ করার পদ্ধতি Calendar
ব্যবহার করে । add()
আপনি যে ক্ষেত্রটি পরিবর্তন করতে চান তাতে পাস করুন এবং একটি সংখ্যা (ঠিক কতটা আপনি বর্তমান মান থেকে যোগ/বিয়োগ করতে চান)। উদাহরণস্বরূপ, আসুন একটি তারিখ পাই যা আমরা তৈরি করা তারিখের 2 মাস আগে:
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
calendar.set(Calendar.HOUR, 19);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
calendar.add(Calendar.MONTH, -2); // To subtract, pass a negative number
System.out.println(calendar.getTime());
}
আউটপুট: শুক্র নভেম্বর 25 19:42:12 GMT 2016 খুব ভাল! আমরা 2 মাস আগে তারিখ পেয়েছি। এটি শুধুমাত্র মাস পরিবর্তন করেনি: বছরটি 2017 থেকে 2016 পর্যন্ত পরিবর্তিত হয়েছে। অবশ্যই, তারিখগুলি রূপান্তর করার সময়, আপনার ম্যানুয়ালি ট্র্যাক রাখার প্রয়োজন ছাড়াই বর্তমান বছরটি স্বয়ংক্রিয়ভাবে গণনা করা হয়। কিন্তু যদি কোনো কারণে আপনার এই আচরণটি নিষ্ক্রিয় করার প্রয়োজন হয়, আপনি তা করতে পারেন। পদ্ধতিটি অবশিষ্ট মানগুলিকে প্রভাবিত না করেroll()
মান যোগ এবং বিয়োগ করতে পারে । উদাহরণস্বরূপ, এই মত:
public static void main(String[] args) {
Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
calendar.roll(Calendar.MONTH, -2);
System.out.println(calendar.getTime());
}
আমরা আগের উদাহরণের মতো ঠিক একই কাজ করেছি: আমরা বর্তমান তারিখ থেকে 2 মাস সময় নিয়েছি। কিন্তু এখন কোডটি ভিন্ন কিছু করে: মাস জানুয়ারি থেকে নভেম্বর পর্যন্ত পরিবর্তিত হয়েছে, কিন্তু বছর অপরিবর্তিত রয়েছে—2017! আউটপুট: শনি নভেম্বর 25 10:42:12 GMT 2017 বরাবর চলন্ত৷ আমরা উপরে বলেছি, আমরা Calendar
আলাদাভাবে সমস্ত ক্ষেত্র পেতে পারি। আমরা get()
পদ্ধতিটি দিয়ে এটি করি:
public static void main(String[] args) {
GregorianCalendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
System.out.println("Year: " + calendar.get(Calendar.YEAR));
System.out.println("Month: " + calendar.get(Calendar.MONTH));
System.out.println("Week in the month: " + calendar.get(Calendar.WEEK_OF_MONTH));// Week in this month?
System.out.println("Day: " + calendar.get(Calendar.DAY_OF_MONTH));
System.out.println("Hours: " + calendar.get(Calendar.HOUR));
System.out.println("Minutes: " + calendar.get(Calendar.MINUTE));
System.out.println("Seconds: " + calendar.get(Calendar.SECOND));
System.out.println("Milliseconds: " + calendar.get(Calendar.MILLISECOND));
}
আউটপুট: বছর: 2017 মাস: মাসে 0 সপ্তাহ: 5 দিন: 25 ঘন্টা: 10 মিনিট: 42 সেকেন্ড: 12 মিলিসেকেন্ড: 0 তাই, ক্লাসের "সুপার-সেটার" ছাড়াও Calendar
একটি "সুপার-গেটার" রয়েছে " :) অবশ্যই, এই শ্রেণীর আরেকটি আকর্ষণীয় দিক যুগের সাথে কাজ করছে। একটি "BC" তারিখ তৈরি করতে, আপনাকে Calendar.ERA ক্ষেত্রটি ব্যবহার করতে হবে উদাহরণস্বরূপ, আসুন ক্যানাইয়ের যুদ্ধের জন্য একটি তারিখ তৈরি করি, যেখানে হ্যানিবল রোমান সেনাবাহিনীকে পরাজিত করেছিলেন। এটি ঘটেছিল 2 আগস্ট, 216 খ্রিস্টপূর্বাব্দে:
public static void main(String[] args) {
GregorianCalendar cannae = new GregorianCalendar(216, Calendar.AUGUST, 2);
cannae.set(Calendar.ERA, GregorianCalendar.BC);
DateFormat df = new SimpleDateFormat("MMM dd, yyy GG");
System.out.println(df.format(cannae.getTime()));
}
এখানে আমরা SimpleDateFormat
ক্লাসটি এমন একটি বিন্যাসে তারিখটি মুদ্রণ করার জন্য ব্যবহার করেছি যা আমাদের পক্ষে বোঝা সহজ ("GG" অক্ষরগুলি নির্দেশ করে যে আমরা যুগটি প্রদর্শন করতে চাই)। আউটপুট: আগস্ট 02, 216 বিসি। ক্লাসে Calendar
আরও অনেক পদ্ধতি এবং ধ্রুবক রয়েছে। আপনি ডকুমেন্টেশন তাদের সম্পর্কে পড়তে পারেন . যদি এই তারিখ বিন্যাসটি পছন্দ না হয় শনি নভেম্বর 25 10:42:12 GMT 2017 তাহলে আপনি SimpleDateFormat
এটিকে সহজেই আপনি যা করতে চান তা তৈরি করতে ব্যবহার করতে পারেন।
public static void main(String[] args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE, MMMM d, yyyy");
Calendar calendar = new GregorianCalendar(2017, Calendar.JANUARY , 25);
calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 42);
calendar.set(Calendar.SECOND, 12);
calendar.roll(Calendar.MONTH, -2);
System.out.println(dateFormat.format(calendar.getTime()));
}
আউটপুট: শনিবার, নভেম্বর 25, 2017 এটা অনেক ভালো, তাই না? :)
GO TO FULL VERSION