তারিখ অবজেক্ট ( java.util.Date
) থেকে পূর্ণসংখ্যা হিসাবে আমি কীভাবে মাস পাব ?
তারিখ অবজেক্ট ( java.util.Date
) থেকে পূর্ণসংখ্যা হিসাবে আমি কীভাবে মাস পাব ?
উত্তর:
আপনি জাভা 8-তে জাভা.টাইম প্যাকেজটি ব্যবহার করতে পারেন এবং আপনার java.util.Date
অবজেক্টটিকে কোনও java.time.LocalDate
অবজেক্টে রূপান্তর করতে পারেন এবং তারপরে কেবল getMonthValue()
পদ্ধতিটি ব্যবহার করতে পারেন ।
Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int month = localDate.getMonthValue();
নোট করুন যে মাসের মানগুলি এখানে cal.get(Calendar.MONTH)
আদর্শের উত্তরের বিপরীতে 1 থেকে 12 পর্যন্ত দেওয়া হয় যা 0 থেকে 11 পর্যন্ত মান দেয়।
তবে বাসিল বাউর্ক মন্তব্যে যেমন বলেছিলেন, পছন্দের Month
উপায়টি হল LocalDate::getMonth
পদ্ধতিটির সাথে এনাম অবজেক্ট পাওয়া ।
ZoneId.of( "America/Montreal" )
।
Month
এনাম অবজেক্টটিও পেতে পারেন । পদ্ধতি Month m = localDate.gotMonth();
দেখুন LocalDate::getMonth
। এর মতো অবজেক্ট ব্যবহার করা আপনার কোডটিকে স্ব-ডকুমেন্টিং করে, প্রকারের সুরক্ষা নিশ্চিত করে এবং বৈধ মানগুলির গ্যারান্টি দেয়। ওরাকল-এর এনাম টিউটোরিয়াল দেখুন ।
date.toInstant()
এবং আপনি কোনও java.sql.Date
(সন্তানের java.util.Date
) সাথে কাজ করছেন তবে আপনি একটি পাবেন UnsupportedOperationException
। চেষ্টা করুনnew java.sql.Date(src.getTime()).toLocalDate()
java.sql.Date
সেই পুরানো শ্রেণিতে যুক্ত হওয়া নতুন রূপান্তর পদ্ধতি ব্যবহার করে / থেকে রূপান্তর করা অনেক সহজ । java.sql.Date.valueOf( myLocalDate )
এবং myJavaSqlDate.toLocalDate()
এছাড়াও, জেডিবিসি ড্রাইভারদের জেডিবিসি ৪.২ এর জন্য আপডেট করা হয়েছে বা তার পরে আর java.sql
প্রকারের প্রয়োজন নেই , এবং সরাসরি এবং পদ্ধতিগুলির java.time
মাধ্যমে প্রকারগুলি সম্বোধন করতে পারে। ResultSet::getObject
PreparedStatement::setObject
java.util.Date date= new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
Calendar.MONTH
কোনও আপাত কারণে জেরো ভিত্তিক নয়, অর্থাৎ জানুয়ারী == 0। এখন এপিআই-তে ঠিক এটি নথিভুক্ত করা হয়েছে, তবে এটি এখনও প্রথমবারের ব্যবহারকারীদের জন্য নরক হিসাবে বিভ্রান্তিকর। আমি এখনও এমন কাউকে খুঁজে পেয়েছি যাঁরা আমাকে কেন বলতে পারলেন যে তারা কেন সে সাথে চলেছিল - সম্ভবত একটি নতুন এসও প্রশ্নের নিজের জন্য সময় আসতে পারে (যদিও আমি আশঙ্কা করি যে এর কোনও দুর্দান্ত পটভূমি নেই: /)
getYear()
হ'ল, "কোন আপাত কারণে" 1900 দ্বারা বিয়োগ করা হয়েছে
আপনি যদি জাভা 8 তারিখ এপিআই ব্যবহার করেন তবে আপনি সরাসরি এটি একটি লাইনে পেতে পারেন!
LocalDate today = LocalDate.now();
int month = today.getMonthValue();
বিকল্পভাবে, জোদা-টাইম DateTime
শ্রেণীর সাথে।
//convert date to datetime
DateTime datetime = new DateTime(date);
int month = Integer.parseInt(datetime.toString("MM"))
... অথবা ...
int month = dateTime.getMonthOfYear();
DateTime
তার মাসের জন্য অবজেক্টটি জিজ্ঞাসা করুন । int month = dateTime.getMonthOfYear();
.toString("MM")
কেবল "এমএম" এর চেয়ে আরও বেশি সম্ভাবনা রয়েছে।
DateTimeZone
যে তারিখসময় কন্সট্রাকটর করার বস্তু: DateTimeZone.forID( "America/Montreal" )
।
myUtilDate.toInstant() // Convert from legacy class to modern. `Instant` is a point on the timeline in UTC.
.atZone( // Adjust from UTC to a particular time zone to determine date. Renders a `ZonedDateTime` object.
ZoneId.of( "America/Montreal" ) // Better to specify desired/expected zone explicitly than rely implicitly on the JVM’s current default time zone.
) // Returns a `ZonedDateTime` object.
.getMonthValue() // Extract a month number. Returns a `int` number.
java.time
বিস্তারিতউত্তর ব্যবহারের জন্য Ortomala Lokni দ্বারা java.time সঠিক। এবং আপনার জাভা.টাইম ব্যবহার করা উচিত কারণ এটি পুরানো java.util.Date/.C ক্যালেন্ডার ক্লাসগুলির তুলনায় একটি বিশাল উন্নতি। জাভা.টাইমে ওরাকল টিউটোরিয়ালটি দেখুন ।
Java.util.Date বিবেচনা না করে কিভাবে জাভা.টাইম ব্যবহার করবেন তা দেখানোর জন্য আমি কয়েকটি কোড যুক্ত করব, যখন আপনি নতুন কোড দিয়ে শুরু করছেন।
সংক্ষেপে জাভা.টাইম ব্যবহার করা… Instant
ইউটিসিতে সময়রেখার একটি মুহুর্ত। একটি সময় অঞ্চল প্রয়োগ করুন ( ZoneId
)ZonedDateTime
।
Month
বর্গ একটি পরিশীলিত হয় enum সাধারণভাবে এক মাসে প্রতিনিধিত্ব করতে। সেই এনামের স্থানীয় নামকরণের মতো সহজ পদ্ধতি রয়েছে। এবং নিশ্চিন্ত থাকুন যে জাভা.টাইমে মাসের নম্বরটি একটি বুদ্ধিমান, 1-12 নয়, শূন্য-ভিত্তিক বাজে কথা (0-11) জাভা.ইটি.এল.ডেট /.ক্যালেন্ডারে পাওয়া যায় না।
বর্তমান তারিখ-সময় পেতে সময় অঞ্চল গুরুত্বপূর্ণ ial কোনও মুহুর্তে বিশ্বব্যাপী তারিখটি এক রকম হয় না । সুতরাং মাসটি বিশ্বব্যাপী সমান হয় না যদি মাসের সমাপ্তি / শুরুর কাছাকাছি থাকে।
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or 'ZoneOffset.UTC'.
ZonedDateTime now = ZonedDateTime.now( zoneId );
Month month = now.getMonth();
int monthNumber = month.getValue(); // Answer to the Question.
String monthName = month.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );
Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই শ্রেণীর বিরক্তিজনক পুরাতন স্থানচ্যুত উত্তরাধিকার যেমন তারিখ-সময় শ্রেণীর java.util.Date
, Calendar
, &SimpleDateFormat
।
Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।
আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310 ।
আপনি আপনার ডাটাবেসের সাথে জাভা.টাইম অবজেক্টগুলি সরাসরি বিনিময় করতে পারেন । জেডিবিসি ৪.২ বা তারপরের সাথে অনুগত একটি জেডিবিসি ড্রাইভার ব্যবহার করুন । স্ট্রিংগুলির দরকার নেই, ক্লাসের প্রয়োজন নেই ।java.sql.*
জাভা.টাইম ক্লাস কোথায় পাবেন?
ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval
, YearWeek
, YearQuarter
, এবং আরো ।
যদি আপনি জোদা সময় ব্যবহার করতে না পারেন এবং আপনি এখনও অন্ধকার বিশ্বে বাস করেন :) (জাভা 5 বা নিম্ন) আপনি এটি উপভোগ করতে পারেন:
দ্রষ্টব্য: আপনার তারিখটি বিন্যাসের দ্বারা তৈরি করা সমস্ত প্রস্তুত: ডিডি / এমএম / ওয়াইওয়াই ওয়াই নিশ্চিত করুন
/**
Make an int Month from a date
*/
public static int getMonthInt(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("MM");
return Integer.parseInt(dateFormat.format(date));
}
/**
Make an int Year from a date
*/
public static int getYearInt(Date date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy");
return Integer.parseInt(dateFormat.format(date));
}
Date mDate = new Date(System.currentTimeMillis());
mDate.getMonth() + 1
প্রত্যাবর্তিত মান 0 থেকে শুরু হয়, সুতরাং আপনার ফলাফলের সাথে একটি যুক্ত করা উচিত।
new Date()
ছাড়া তারিখ তৈরি করতে পারেন System.currentTimeMillis
। অন্যটি হ'ল getMonth অবমূল্যায়িত।