জাভাতে গ্রেগরিয়ান ক্যালেন্ডারের তারিখের সাথে তুলনা করতে আমি জাভা তারিখ থেকে বছর, মাস, দিন ইত্যাদি পেতে চাই। এটা কি সম্ভব?


231

আমার জাভাতে একটি তারিখ অবজেক্ট রয়েছে জাভাটির তারিখের ধরণ হিসাবে stored

আমার একটি গ্রেগরিয়ান ক্যালেন্ডার তৈরি করার তারিখও রয়েছে। গ্রেগরিয়ান ক্যালেন্ডারের তারিখের কোনও প্যারামিটার নেই এবং তাই আজকের তারিখের (এবং সময়?) উদাহরণ।

জাভা তারিখের সাথে, আমি জাভা তারিখের টাইপ থেকে বছর, মাস, দিন, ঘন্টা, মিনিট এবং সেকেন্ড পেতে এবং গ্রেগরিয়ানক্যালেন্ডার তারিখের তুলনা করতে সক্ষম হতে চাই।

আমি দেখেছি যে এই মুহুর্তে জাভা তারিখটি দীর্ঘ হিসাবে সঞ্চিত রয়েছে এবং কেবলমাত্র উপলব্ধ পদ্ধতিগুলি কেবল লম্বাটিকে বিন্যাসিত তারিখের স্ট্রিং হিসাবে লিখবে বলে মনে হয়। বছর, মাস, দিন, ইত্যাদি অ্যাক্সেস করার কোনও উপায় আছে?

দেখলাম getYear(), getMonth()জন্য, ইত্যাদি পদ্ধতি Dateবর্গ অবচিত হয়েছে। আমি ভাবছিলাম যে তারিখটি সহ জাভা তারিখের উদাহরণটি ব্যবহার করার জন্য আমার সেরা অনুশীলন GregorianCalendar

আমার শেষ লক্ষ্যটি একটি তারিখ গণনা করা যাতে আমি পরীক্ষা করতে পারি যে জাভা তারিখটি আজকের তারিখ এবং সময়ের অনেক ঘন্টা, মিনিট ইত্যাদির মধ্যে রয়েছে।

আমি এখনও জাভাতে এক নবাগত এবং এ দেখে কিছুটা হতবাক হয়ে যাচ্ছি।


1
আরে আপনি যা ব্যবহার করেন তা ব্যবহার করবেন না Date.getYear()problems এটি সমস্যায় ভুগছে (যা আমি জানি না)। Date.getYear()একবার আমার তারিখটি 30/06/2017 পার্স করে এবং এটি আমার বছর 117 হিসাবে ফিরে আসে। দেখুন এটি কোথায় নেমেছে, দুই হাজার বছর আগে back তবে যখন আমি কেবল তারিখের অবজেক্টটি প্রিন্ট করি তখন আউটপুটটি ছিল দুর্দান্ত B তবে তা নয় Date.getYear();
সেনিভাজন

এফওয়াইআই: আপনি আধুনিক জবা.টাইম ক্লাস দ্বারা অনুপ্রাণিত হয়ে এখনকার উত্তরাধিকারসূত্রে সমস্যাযুক্ত পুরানো তারিখ-কালীন ক্লাস ব্যবহার করছেন।
বেসিল Bourque

উত্তর:


544

এর মতো কিছু ব্যবহার করুন:

Date date; // your date
// Choose time zone in which you want to interpret your Date
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Paris"));
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
// etc.

সাবধান, মাসগুলি 0 থেকে শুরু হয়, 1 নয়।

সম্পাদনা : যেহেতু জাভা 8 এটা ভালো ব্যবহার করতে java.time.LocalDate বদলে java.util.Calendar । এটি করার জন্য এই উত্তরটি দেখুন ।


4
আপনি cal.add(Calendar.DAY_OF_MONTH, -48)ক্যালেন্ডার অবজেক্টগুলিতে ডে গাণিতিক করতে ব্যবহার করতে পারেন । এবং আপনি দুটি ক্যালেন্ডার অবজেক্ট ব্যবহার করে তুলনা করতে পারেন cal.compareTo(anotherCal)
ফ্লোরেন্ট

1
উজ্জ্বল, চিয়ার্স ফ্লোরেন্ট! উপরের অর্থ কি ক্যালেন্ডার আপডেট হয়ে যাওয়া বছর এবং দিন, সেকেন্ড, মিনিট এবং সেকেন্ড ফিরে আসবে যখন ক্যালেন্ডার পান পদ্ধতিগুলি ব্যবহার করা হয়? ডেভ
দভেব

11
নোট করুন যে মাসটি 0 থেকে শুরু হয় না (1 জানুয়ারী = 0)। docs.oracle.com/javase/6/docs/api/java/util/Cocolate.html#MONTH
স্টিভ কুও

10
জাভা কেন এত অসুবিধে হয়?
কিমচি ম্যান

3
কারণ তারিখ এবং ক্যালেন্ডার পুরানো এবং খারাপভাবে ডিজাইন করা হয়েছে। জাভা 8 এর আরও অনেক ভাল ডেটা / সময় অবজেক্ট রয়েছে, দেখুন oracle.com/technetwork/articles/java/…
ফ্লোরেন্ট

88

জাভা 8 এবং তার পরে, আপনি তারিখ অবজেক্টকে লোকালডেট অবজেক্টে রূপান্তর করতে পারেন এবং তারপরে সহজেই বছর, মাস এবং দিনটি পেতে পারেন।

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year  = localDate.getYear();
int month = localDate.getMonthValue();
int day   = localDate.getDayOfMonth();

নোট করুন যে getMonthValue()1 থেকে 12 পর্যন্ত কোনও ইনট মান দেয়।


10
এখন 2016, আমি বিশ্বাস করি LocalDateজাভা 8 এ ব্যবহার করা আপনার সমাধানটি সবচেয়ে ভাল সমাধান, এটির একটি আরও সমাধান যা ব্যবহার করে Calendarএবং Dateসমস্যায় পূর্ণ।
অ্যানিফর্মটাইওয়ান

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

1
দুর্ভাগ্যক্রমে এন্ড্রয়েডের জন্য এপিআই স্তর 26+।
উইক্টর কালিনোভস্কি

14

আপনি এর মতো কিছু করতে পারেন, এটি Dateশ্রেণি কীভাবে কাজ করে তা ব্যাখ্যা করবে ।

String currentDateString = "02/27/2012 17:00:00";
SimpleDateFormat sd = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date currentDate = sd.parse(currentDateString);

String yourDateString = "02/28/2012 15:00:00";
SimpleDateFormat yourDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

Date yourDate = yourDateFormat.parse(yourDateString);

if (yourDate.after(currentDate)) {
    System.out.println("After");
} else if(yourDate.equals(currentDate)) {
    System.out.println("Same");
} else {
    System.out.println("Before");
}

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

8
দয়া করে কোডটি ঠিক করুন ... ছোট হাতের mmমিনিট ইঙ্গিত করে, বড় হাতের MMঅর্থ বছরের বছরের মাস।
YoYo

12
    Date date = new Date();

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");

    System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase());

    simpleDateFormat = new SimpleDateFormat("MMMM");
    System.out.println("MONTH "+simpleDateFormat.format(date).toUpperCase());

    simpleDateFormat = new SimpleDateFormat("YYYY");
    System.out.println("YEAR "+simpleDateFormat.format(date).toUpperCase());

সম্পাদনা: আউটপুট date= এর Fri Jun 15 09:20:21 CEST 2018জন্য:

DAY FRIDAY
MONTH JUNE
YEAR 2018

আপনি যদি কমপক্ষে আউটপুটটি রেখেছিলেন তবে কোডগুলি না চালিয়ে লোকেরা সিদ্ধান্ত নিতে পারে এটি তাদের পক্ষে কার্যকর হতে পারে কি না।
সান্টিবাইলার্স

6
private boolean isSameDay(Date date1, Date date2) {
    Calendar calendar1 = Calendar.getInstance();
    calendar1.setTime(date1);
    Calendar calendar2 = Calendar.getInstance();
    calendar2.setTime(date2);
    boolean sameYear = calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR);
    boolean sameMonth = calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH);
    boolean sameDay = calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
    return (sameDay && sameMonth && sameYear);
}

3
    Date queueDate = new SimpleDateFormat("yyyy-MM-dd").parse(inputDtStr);
    Calendar queueDateCal = Calendar.getInstance();
    queueDateCal.setTime(queueDate);
    if(queueDateCal.get(Calendar.DAY_OF_YEAR)==Calendar.getInstance().get(Calendar.DAY_OF_YEAR))
{
    "same day of the year!";
 }

1
স্ট্যাক ওভারফ্লোতে উত্তরগুলি কেবল কোড স্নিপেট নয়, কিছু আলোচনা এবং ব্যাখ্যা বলে আশাবাদী। এবং আপনার কোড অবশ্যই কিছু ব্যাখ্যা ব্যবহার করতে পারে।
তুলিল বাউরক

1
অবগতির জন্য, যেমন ভয়ঙ্কর বিরক্তিজনক পুরাতন তারিখ-সময় শ্রেণীর java.util.Date, java.util.Calendarএবং java.text.SimpleDateFormatএখন উত্তরাধিকার দ্বারা supplanted java.time জাভা 8 এবং পরে পাতাটা ক্লাস। ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
তুলিল বাউরক

2
@Test
public void testDate() throws ParseException {
    long start = System.currentTimeMillis();
    long round = 100000l;
    for (int i = 0; i < round; i++) {
        StringUtil.getYearMonthDay(new Date());
    }
    long mid = System.currentTimeMillis();
    for (int i = 0; i < round; i++) {
        StringUtil.getYearMonthDay2(new Date());
    }
    long end = System.currentTimeMillis();
    System.out.println(mid - start);
    System.out.println(end - mid);
}

public static Date getYearMonthDay(Date date) throws ParseException {
    SimpleDateFormat f = new SimpleDateFormat("yyyyyMMdd");
    String dateStr = f.format(date);
    return f.parse(dateStr);
}

public static Date getYearMonthDay2(Date date) throws ParseException {
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.HOUR_OF_DAY, 0);
    return c.getTime();
}
public static int compare(Date today, Date future, Date past) {
    Date today1 = StringUtil.getYearMonthDay2(today);
    Date future1 = StringUtil.getYearMonthDay2(future);
    Date past1 = StringUtil.getYearMonthDay2(past);
    return today.compare // or today.after or today.before
}

getYearMonthDay2 (ক্যালেন্ডার সমাধান) দশগুণ দ্রুত। এখন আপনার yYYYMM dd 00 00 00 আছে, এবং তারপরে ডট কম পেয়ার ব্যবহার করে তুলনা করুন


2

এটা সহজ হতে পারে

     Date date1 = new Date("31-May-2017");
OR
    java.sql.Date date1 = new java.sql.Date((new Date()).getTime());

    SimpleDateFormat formatNowDay = new SimpleDateFormat("dd");
    SimpleDateFormat formatNowMonth = new SimpleDateFormat("MM");
    SimpleDateFormat formatNowYear = new SimpleDateFormat("YYYY");

    String currentDay = formatNowDay.format(date1);
    String currentMonth = formatNowMonth.format(date1);
    String currentYear = formatNowYear.format(date1);

-2

সাবধানতার সাথে মাউন্ট থেকে শুরু করুন 0 থেকে 1 নয় And এবং এছাড়াও ক্যালেন্ডারটি বিকাল বেলা ব্যবহার করুন যাতে খুব সাবধানতার সাথে সময়টি উত্তর মিনিট ব্যবহার করুন।

Date your_date;
Calendar cal = Calendar.getInstance(); 
cal.setTime(your_date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MINUTE);


1
আধুনিক জাভা.টাইম ব্যবহার করা আরও ভাল যা এখানে দেখানো এই ঝামেলা পুরাতন উত্তরাধিকার শ্রেণিগুলিকে সমর্থন করে। সঠিক উত্তরটি
তুলসী বাউরকের

উত্তর এবং পরামর্শের জন্য আপনাকে ধন্যবাদ। এটা খুব ভাল।
হারুন উগুর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.