উত্তর:
এখানে ডক্স থেকে নেওয়া :
ক্যালেন্ডারের নিয়মের ভিত্তিতে প্রদত্ত ক্যালেন্ডার ক্ষেত্রে নির্দিষ্ট সময়কে যোগ বা বিয়োগ করে। উদাহরণস্বরূপ, ক্যালেন্ডারের বর্তমান সময় থেকে 5 দিন বিয়োগ করতে, আপনি কল করে এটি অর্জন করতে পারেন:
Calendar calendar = Calendar.getInstance(); // this would default to now calendar.add(Calendar.DAY_OF_MONTH, -5).
Calendar.DAY_OF_MONTH
এই ক্ষেত্রে ব্যবহার করবেন না কারণ এটি আপনার পছন্দ মতো কয়েক মাসের মধ্যে রোলটি পরিচালনা করবে না। Calendar.DAY_OF_YEAR
পরিবর্তে ব্যবহার করুন
আপনি add
পদ্ধতিটি ব্যবহার করতে পারেন এবং এটি একটি নেতিবাচক সংখ্যাটি পাস করতে পারেন । তবে আপনি এমন একটি সহজ পদ্ধতিও লিখতে পারেন Calendar
যা নীচের মতো শ্রেণিটি ব্যবহার করে না
public static void addDays(Date d, int days)
{
d.setTime( d.getTime() + (long)days*1000*60*60*24 );
}
এটি তারিখের টাইমস্ট্যাম্প মান (যুগের পর থেকে মিলিসেকেন্ড) পায় এবং যথাযথ সংখ্যক মিলিসেকেন্ড যুক্ত করে। বিয়োগফলগুলি করতে আপনি প্যারামিটারের জন্য একটি নেতিবাচক পূর্ণসংখ্যার পাস করতে পারেন। এটি "যথাযথ" ক্যালেন্ডার সমাধানের চেয়ে সহজ হবে:
public static void addDays(Date d, int days)
{
Calendar c = Calendar.getInstance();
c.setTime(d);
c.add(Calendar.DATE, days);
d.setTime( c.getTime().getTime() );
}
নোট করুন যে এই উভয় সমাধানই Date
সম্পূর্ণ নতুন ফিরে আসার পরিবর্তে পরামিতি হিসাবে পাস করা অবজেক্টটিকে পরিবর্তন করে Date
। হয় ফাংশন সহজেই অন্যভাবে এটি পরিবর্তন করতে পারে যদি ইচ্ছা হয়।
java.util.Calendar
এখন লিগ্যাসি । ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
আনসনের উত্তরটি সহজ ক্ষেত্রে কার্যকর হবে, তবে আপনি যদি আরও জটিল তারিখ গণনা করতে যাচ্ছেন তবে আমি জোদা সময় পরীক্ষা করে দেখার পরামর্শ দেব । এটি আপনার জীবনকে আরও সহজ করে তুলবে।
জোদা সময় এফওয়াইআই আপনি করতে পারেন
DateTime dt = new DateTime();
DateTime fiveDaysEarlier = dt.minusDays(5);
LocalDate.now().minusDays( 10 )
সময় অঞ্চল নির্দিষ্ট করা ভাল।
LocalDate.now( ZoneId.of( "America/Montreal" ) ).minusDays( 10 )
পুরানো ডেট-টাইম ক্লাসগুলি জাভা-র প্রাথমিক সংস্করণগুলির সাথে বান্ডিল করা, যেমন java.util.Date
/ .Calendar
, ঝামেলা, বিভ্রান্তিকর এবং ত্রুটিযুক্ত বলে প্রমাণিত হয়েছে। এগুলি এড়িয়ে চলুন।
জাভা 8 এবং পরবর্তীকালে সেই পুরানো ক্লাসগুলি নতুন জাভা.টাইম ফ্রেমওয়ার্কের সাহায্যে সরবরাহ করে। টিউটোরিয়াল দেখুন । জেএসআর 310 দ্বারা সংজ্ঞায়িত , জোদা-টাইম দ্বারা অনুপ্রাণিত এবং থ্রিটেন-অতিরিক্ত প্রকল্প দ্বারা প্রসারিত । থ্রিটেন-ব্যাকপোর্ট প্রকল্পটি জাভা 6 & 7 এ ক্লাসগুলি ব্যাক-পোর্ট করে; অ্যান্ড্রয়েডে থ্রিটিএনএবিপি প্রকল্প।
প্রশ্নটি অস্পষ্ট, এটি কেবলমাত্র তারিখের জন্য বা তারিখ-সময় চাইলে পরিষ্কার হয় না।
LocalDate
কেবলমাত্র তারিখের জন্য, দিনের সময় ব্যতীত LocalDate
ক্লাসটি ব্যবহার করুন । নোট করুন যে একটি সময় অঞ্চল যেমন "আজ" হিসাবে একটি তারিখ নির্ধারণে গুরুত্বপূর্ণ in
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
LocalDate tenDaysAgo = today.minusDays( 10 );
ZonedDateTime
যদি আপনি কোনও তারিখ-সময় বোঝাতে চান, তবে ইউটিসিতেInstant
সময়রেখায় একটি মুহূর্ত পেতে ক্লাসটি ব্যবহার করুন । সেখান থেকে কোনও অবজেক্ট পেতে একটি সময় জোনে সামঞ্জস্য করুন ।ZonedDateTime
Instant now = Instant.now(); // UTC.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
ZonedDateTime tenDaysAgo = zdt.minusDays( 10 );
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.Date
Calendar
SimpleDateFormat
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval
, YearWeek
, YearQuarter
, এবং আরো ।
int x = -1;
Calendar cal = ...;
cal.add(Calendar.DATE, x);
সম্পাদনা করুন: পার্সারটি জাভাদোকের লিঙ্কটি পছন্দ করছে বলে মনে হচ্ছে না, তাই এটি এখানে সরলখরতে রয়েছে:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Clall.html#add(int , int)
addDays
এলির পরামর্শ অনুযায়ী আমার নিজের লেখার পরিবর্তে , আমি আপাচিDateUtils
থেকে ব্যবহার করতে পছন্দ করব । বিশেষত যখন আপনার প্রকল্পে এটি একাধিক জায়গা ব্যবহার করতে হয় তখন এটি কার্যকর It
এপিআই বলে:
addDays(Date date, int amount)
একটি নতুন অবজেক্ট ফিরিয়ে আনার তারিখে বেশ কয়েকটি দিন যুক্ত করে।
দ্রষ্টব্য যে এটি একটি নতুন Date
অবজেক্ট রিটার্ন করে এবং পূর্ববর্তীটিতে নিজেই পরিবর্তন করে না।
এটি নিম্নলিখিত দ্বারা সহজেই করা যেতে পারে
Calendar calendar = Calendar.getInstance();
// from current time
long curTimeInMills = new Date().getTime();
long timeInMills = curTimeInMills - 5 * (24*60*60*1000); // `enter code here`subtract like 5 days
calendar.setTimeInMillis(timeInMills);
System.out.println(calendar.getTime());
// from specific time like (08 05 2015)
calendar.set(Calendar.DAY_OF_MONTH, 8);
calendar.set(Calendar.MONTH, (5-1));
calendar.set(Calendar.YEAR, 2015);
timeInMills = calendar.getTimeInMillis() - 5 * (24*60*60*1000);
calendar.setTimeInMillis(timeInMills);
System.out.println(calendar.getTime());
LocalDate
করা অনেক সহজ এবং আরও উপযুক্ত।
কেউ জোদা সময়কে সুপারিশ করেছেন - আমি এই ক্যালেন্ডার তারিখ শ্রেণিটি ব্যবহার করছি http://cenderardate.sourceforge.net
এটি জোদা সময়ের প্রতি কিছুটা প্রতিদ্বন্দ্বী প্রকল্প, তবে এটি কেবলমাত্র 2 ক্লাসে অনেক বেশি বেসিক। এটি আমার পক্ষে প্রজেক্টের চেয়ে বড় কোনও প্যাকেজটি ব্যবহার করতে চাই না বলে আমার প্রয়োজনের জন্য এটি খুব সহজ এবং দুর্দান্ত কাজ করেছে। জাভা অংশগুলির মতো নয়, এর ক্ষুদ্রতম ইউনিটটি সেদিন তাই এটি সত্যই একটি তারিখ (এটি মিলিসেকেন্ড বা কোনও কিছুর সাথে নিচে নেই)। আপনি একবার তারিখটি তৈরি করলে, আপনি বিয়োগ করতে যা কিছু করেন তা হ'ল myDay.addDays (-5) এর 5 দিন পিছনে যেতে হবে। আপনি সপ্তাহের দিন এবং এর মতো জিনিসগুলি খুঁজতে এটি ব্যবহার করতে পারেন। আরেকটি উদাহরণ:
CalendarDate someDay = new CalendarDate(2011, 10, 27);
CalendarDate someLaterDay = today.addDays(77);
এবং:
//print 4 previous days of the week and today
String dayLabel = "";
CalendarDate today = new CalendarDate(TimeZone.getDefault());
CalendarDateFormat cdf = new CalendarDateFormat("EEE");//day of the week like "Mon"
CalendarDate currDay = today.addDays(-4);
while(!currDay.isAfter(today)) {
dayLabel = cdf.format(currDay);
if (currDay.equals(today))
dayLabel = "Today";//print "Today" instead of the weekday name
System.out.println(dayLabel);
currDay = currDay.addDays(1);//go to next day
}
আমি বিশ্বাস করি যে কোনও সময় ইউনিট (মাস, দিন, ঘন্টা, মিনিট, সেকেন্ড, ...) বিয়োগ বা সংযোজন করার একটি পরিষ্কার এবং দুর্দান্ত উপায় জাভা.টাইম.আইন্সট্যান্ট ক্লাস ব্যবহার করে অর্জন করা যেতে পারে ।
বর্তমান সময় থেকে 5 দিন বিয়োগ এবং তারিখ হিসাবে ফলাফল পাওয়ার উদাহরণ:
new Date(Instant.now().minus(5, ChronoUnit.DAYS).toEpochMilli());
1 ঘন্টা বিয়োগ করে 15 মিনিট যুক্ত করার জন্য আরেকটি উদাহরণ:
Date.from(Instant.now().minus(Duration.ofHours(1)).plus(Duration.ofMinutes(15)));
আপনার যদি আরও নির্ভুলতার প্রয়োজন হয় তবে ইনস্ট্যান্স ন্যানোসেকেন্ডগুলি পরিমাপ করে। ন্যানোসেকেন্ড অংশ পরিচালনা করার পদ্ধতি:
minusNano()
plusNano()
getNano()
এছাড়াও, মনে রাখবেন যে তারিখটি তাত্ক্ষণিকের মতো সঠিক নয়।
Date.from(Instant.now().minus(5, ChronoUnit.DAYS))
এলি কোর্টরাইটের দ্বিতীয় সমাধানটি ভুল, এটি হওয়া উচিত:
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, -days);
date.setTime(c.getTime().getTime());
addDays
; তার সমাধানটি সঠিক। আপনি যদি তারিখ থেকে দিনগুলি বিয়োগ করতে চান তবে আপনি এর জন্য একটি নেতিবাচক মান দিয়ে গেছেন days
।
java.util.Calendar
এখন লিগ্যাসি । ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।