নির্দিষ্ট তারিখ পেরিয়ে কিভাবে সপ্তাহের দিন নির্ধারণ করবেন?


187

উদাহরণস্বরূপ আমার তারিখটি রয়েছে: "23/2/2010" (23 ফেব্রুয়ারী 2010) আমি এটি একটি ফাংশনে পাস করতে চাই যা সপ্তাহের দিনটি ফিরে আসবে । কিভাবে আমি এটি করতে পারব?

এই উদাহরণে, ফাংশনটি String"মান" ফিরিয়ে আনতে হবে should

অতিরিক্তভাবে, যদি কেবলমাত্র দিনের অর্ডিনালটি পছন্দ হয় তবে কীভাবে তা পুনরুদ্ধার করা যায়?

উত্তর:


349

হ্যাঁ. আপনার সঠিক ক্ষেত্রে উপর নির্ভর করে:

  • আপনি ব্যবহার করতে পারেন java.util.Calendar:

    Calendar c = Calendar.getInstance();
    c.setTime(yourDate);
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
  • আপনার যদি আউটপুটটি Tue3 এর পরিবর্তে হওয়া প্রয়োজন হয় (সপ্তাহের দিনগুলি রবিবারের জন্য 1 এ সূচিত হয়, ক্যালেন্ডার দেখুন U সুইডে), ক্যালেন্ডারে না গিয়ে কেবল স্ট্রিংটির পুনরায় ফর্ম্যাট করুন: new SimpleDateFormat("EE").format(date)( EEযার অর্থ "সপ্তাহের দিন, সংক্ষিপ্ত সংস্করণ" )

  • যদি আপনার ইনপুটটি স্ট্রিং হিসাবে থাকে, পরিবর্তে Date, আপনার SimpleDateFormatএটি পার্স করার জন্য ব্যবহার করা উচিত :new SimpleDateFormat("dd/M/yyyy").parse(dateString)

  • আপনি জোদা-সময় DateTimeএবং কল dateTime.dayOfWeek()এবং / অথবা ব্যবহার করতে পারেন DateTimeFormat

  • সম্পাদনা করুন: জাভা 8-এর পরে আপনি এখন জোদা-সময়ের পরিবর্তে java.Time প্যাকেজটি ব্যবহার করতে পারেন


20
সপ্তাহের দিন, 1 যা রবিবার থেকে শুরু তাই আমি মনে করি মঙ্গল 3. হবে
মোহাম্মদ Banisaeid

13
অন্যান্য বিষয়গুলিতে সতর্কতা অবলম্বন করার জন্য, আপনি যদি পূর্ণসংখ্যার সাহায্যে ক্যালেন্ডার অবজেক্টে তারিখটি নির্ধারণ করেন (স্ট্রিং পার্সিংয়ের মাধ্যমে নয়) তবে সচেতন হন যে মাসের সংখ্যাটি শূন্য-ভিত্তিক, সুতরাং জানুয়ারী 0 এবং ডিসেম্বর 11
রেনিপেট

4
@ রেনিপিট: ভাল এছাড়াও আপনি মধ্যে ধ্রুবক ব্যবহার করতে পারেন Calendarযেমন বর্গ, Calendar.SUNDAYবা Calendar.JANUARY
মোহাম্মদ বানিসায়েদ

2
এই উত্তরটি যখন এটি লেখা হয়েছিল তখন দুর্দান্ত উত্তর ছিল। আজ আপনি এখন পুরানো শ্রেণীর করতে চাইবেন Calendar, Dateএবং DateTimeFormat(এবং Joda এবারও) এবং জাভা 8 ব্যবহার java.timeক্লাস, উদাহরণস্বরূপ YearMonthবা LocalDateএই উত্তর আরও দেখুন ।
ওলে ভিভি

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

68
  String input_date="01/08/2012";
  SimpleDateFormat format1=new SimpleDateFormat("dd/MM/yyyy");
  Date dt1=format1.parse(input_date);
  DateFormat format2=new SimpleDateFormat("EEEE"); 
  String finalDay=format2.format(dt1);

একটি ইনপুট তারিখ থেকে দিনের নাম সন্ধানের জন্য এই কোডটি ব্যবহার করুন impএমনই এবং ভাল পরীক্ষিত।


1
আপনি যদি এই পদ্ধতিটি ব্যবহার করেন তবে দিন এবং মাসের ক্রমটি যত্ন সহকারে নোট করুন।
জোয়েল ক্রিস্টোফেল

1
আমার মনে হয় আপনার এটিকে চেষ্টা করে দেখার চেষ্টা করা দরকার
শাফায়াত

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

অ্যান্ড্রয়েড কেবলমাত্র এপিআই 26 এর পরে স্থানীয় তারিখ প্রয়োগ করে
জ্যাকব সানচেজ

29

কেবল সিম্পলডেটফরম্যাট ব্যবহার করুন

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", java.util.Locale.ENGLISH);
Date myDate = sdf.parse("28/12/2013");
sdf.applyPattern("EEE, d MMM yyyy");
String sMyDate = sdf.format(myDate);

ফলাফল: শনি, 28 ডিসেম্বর 2013

ডিফল্ট কনস্ট্রাক্টর "ডিফল্ট" লোকালে নিচ্ছেন , সুতরাং আপনার যখন কোনও নির্দিষ্ট প্যাটার্ন দরকার হয় তখন এটি ব্যবহারে সতর্ক হন।

public SimpleDateFormat(String pattern) {
    this(pattern, Locale.getDefault(Locale.Category.FORMAT));
}

21

TL; ড

জাভা.টাইম ব্যবহার করা হচ্ছে ...

LocalDate.parse(                               // Generate `LocalDate` object from String input.
             "23/2/2010" ,
             DateTimeFormatter.ofPattern( "d/M/uuuu" ) 
         )                                    
         .getDayOfWeek()                       // Get `DayOfWeek` enum object.
         .getDisplayName(                      // Localize. Generate a String to represent this day-of-week.
             TextStyle.SHORT_STANDALONE ,      // How long or abbreviated. Some languages have an alternate spelling for "standalone" use (not so in English).
             Locale.US                         // Or Locale.CANADA_FRENCH and such. Specify a `Locale` to determine (1) human language for translation, and (2) cultural norms for abbreviation, punctuation, etc.
         ) 

মঙ্গল

IdeOne.com এ এই কোডটি সরাসরি চালিত দেখুন (তবে কেবল Locale.USসেখানে কাজ করে)।

java.time

উপরের আমার উদাহরণ কোডটি দেখুন এবং প্রজেমেকের দ্বারা জাভা.টাইমের সঠিক উত্তর দেখুন ।

পূরণবাচক সংখ্যা

যদি কেবলমাত্র অর্ডিনালটি পছন্দ হয় তবে কীভাবে তা পুনরুদ্ধার করা যায়?

অর্ডিনাল সংখ্যার জন্য DayOfWeekএনাম অবজেক্টের পরিবর্তে যেমন পাস করা বিবেচনা করুন DayOfWeek.TUESDAY। মনে রাখবেন যে একটি DayOfWeekহ'ল একটি স্ট্রিং বা নিছক পূর্ণসংখ্যার সংখ্যা নয় smart এই এনাম অবজেক্টগুলি ব্যবহার করা আপনার কোডটিকে আরও স্ব-ডকুমেন্টিং করে, বৈধ মানগুলি নিশ্চিত করে এবং প্রকারের সুরক্ষা সরবরাহ করে

তবে আপনি যদি জেদ করেন তবে একটি সংখ্যা জিজ্ঞাসা করুনDayOfWeek । আপনি আইএসও 8601 স্ট্যান্ডার্ড অনুযায়ী সোমবার-রবিবারের জন্য 1-7 পান ।

int ordinal = myLocalDate.getDayOfWeek().getValue() ;

Joda-টাইম

আপডেট: জোদা-সময় প্রকল্পটি এখন রক্ষণাবেক্ষণ মোডে রয়েছে। দলটি জাভা.টাইম ক্লাসে স্থানান্তরের পরামর্শ দেয়। জাভা.টাইম ফ্রেমওয়ার্কটি জাভা 8 এ নির্মিত হয়েছে (পাশাপাশি জাভা 6 এবং 7 এ ব্যাক-পোর্ট করা হয়েছে এবং আরও অ্যান্ড্রয়েডের সাথে মানিয়ে নেওয়া হয়েছে )।

বোডো গ্রহণযোগ্য উত্তরে উল্লিখিত জোডা-টাইম লাইব্রেরি সংস্করণ ২.৪ ব্যবহার করে এখানে কোডের উদাহরণ রয়েছে । জাভা-টাইম জাভা.ইটি.এল.ডেট / ডি.ক্যালেন্ডার ক্লাসগুলির চেয়ে জাভা বান্ডিলের তুলনায় অনেক উন্নত।

LocalDate

জোডা-টাইম LocalDateকোনও দিন সময় বা সময় অঞ্চল ছাড়াই কেবলমাত্র তারিখের প্রতিনিধিত্ব করার জন্য শ্রেণিকে অফার করে । এই প্রশ্নটি কেবল যা চাইবে। পুরানো java.util.Date/. ক্যালেন্ডার ক্লাস জাভা বান্ডিল এই ধারণার অভাব।

ব্যকরণগত

তারিখের মানটিতে স্ট্রিংটিকে পার্স করুন।

String input = "23/2/2010";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( input );

নির্যাস

তারিখের মান থেকে সপ্তাহের নম্বর এবং নাম দিন ract

int dayOfWeek = localDate.getDayOfWeek(); // Follows ISO 8601 standard, where Monday = 1, Sunday = 7.
Locale locale = Locale.US;  // Locale specifies the human language to use in determining day-of-week name (Tuesday in English versus Mardi in French).
DateTimeFormatter formatterOutput = DateTimeFormat.forPattern( "E" ).withLocale( locale );
String output = formatterOutput.print( localDate ); // 'E' is code for abbreviation of day-of-week name. See Joda-Time doc.
String outputQuébécois = formatterOutput.withLocale( Locale.CANADA_FRENCH ).print( localDate );

মনমরা ভাব

কনসোল করতে ডাম্প।

System.out.println( "input: " + input );
System.out.println( "localDate: " + localDate ); // Defaults to ISO 8601 formatted strings.
System.out.println( "dayOfWeek: " + dayOfWeek );
System.out.println( "output: " + output );
System.out.println( "outputQuébécois: " + outputQuébécois );

চালান

যখন রান।

input: 23/2/2010
localDate: 2010-02-23
dayOfWeek: 2
output: Tue
outputQuébécois: mar.

জাভা.টাইম সম্পর্কে

Java.time ফ্রেমওয়ার্ক জাভা 8 এবং পরে পাতাটা করা হয়। এই ক্লাসগুলি , & , এর মতো সমস্যাযুক্ত পুরানো উত্তরাধিকারের তারিখ-সময়ের ক্লাসগুলিকে সহায়তা করে ।java.util.DateCalendarSimpleDateFormat

Joda-টাইম প্রকল্প, এখন রক্ষণাবেক্ষণ মোড , মাইগ্রেশনে উপদেশ java.time ক্লাস।

আরও জানতে, ওরাকল টিউটোরিয়ালটি দেখুন । এবং অনেক উদাহরণ এবং ব্যাখ্যার জন্য স্ট্যাক ওভারফ্লো অনুসন্ধান করুন। স্পেসিফিকেশনটি জেএসআর 310

জাভা.টাইম ক্লাস কোথায় পাবেন?

ThreeTen-অতিরিক্ত প্রকল্প অতিরিক্ত শ্রেণীর সাথে java.time প্রসারিত করে। এই প্রকল্পটি জাভা.টাইমে সম্ভাব্য ভবিষ্যতের সংযোজনগুলির একটি প্রমাণযোগ্য ক্ষেত্র। আপনি এখানে কিছু দরকারী শ্রেণীর যেমন খুঁজে পেতে পারেন Interval, YearWeek, YearQuarter, এবং আরো


15

java.time

java.timeজাভা 8 এবং তার পরে নির্মিত ফ্রেমওয়ার্ক ব্যবহার করে ।

দ্য DayOfWeek Enum দিন নাম স্বয়ংক্রিয়ভাবে মানুষের ভাষা ও একটি সাংস্কৃতিক নিয়ম স্থানীয় একটি স্ট্রিং তৈরি করতে পারেন LocaleTextStyleআপনি দীর্ঘ ফর্ম বা সংক্ষিপ্ত নাম চান তা নির্দেশ করতে একটি নির্দিষ্ট করুন ।

import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.format.TextStyle
import java.util.Locale
import java.time.DayOfWeek;

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/yyyy");
LocalDate date = LocalDate.parse("23/2/2010", formatter); // LocalDate = 2010-02-23
DayOfWeek dow = date.getDayOfWeek();  // Extracts a `DayOfWeek` enum object.
String output = dow.getDisplayName(TextStyle.SHORT, Locale.US); // String = Tue

1
এটি কেবল ওরিও এবং উপরের এপিসে ব্যবহার করা যেতে পারে।
কোডিপিকার

2
@ কোডপিকার জাভা.টাইম কার্যকারিতাটির বেশিরভাগ থ্রিটেন-ব্যাকপোর্ট প্রকল্পে জাভা 6 এবং জাভা 7 -এ ব্যাকপোর্ট করা হয়েছে। আরও আগে অ্যান্ড্রয়েড (<26) জন্য অভিযোজিত ThreeTenABP । দেখুন ThreeTenABP কীভাবে ব্যবহার করতে হয় ...
তুলিল বাউর্ক

9

আপনি নিম্নলিখিত কোড চেষ্টা করতে পারেন:

import java.time.*;

public class Test{
   public static void main(String[] args) {
      DayOfWeek dow = LocalDate.of(2010,Month.FEBRUARY,23).getDayOfWeek();
      String s = String.valueOf(dow);
      System.out.println(String.format("%.3s",s));
   }
}

এই উত্তরটি কীভাবে দুটি বা তিনটি পূর্ববর্তী উত্তর ব্যবহারের চেয়ে বেশি মূল্য যুক্ত করে LocalDate? আপনি কি পোস্ট করার আগে পড়েন?
তুলিল বাউরক

1
এটি একটি ভাল উত্তর, এবং এটি পূর্ববর্তী সমস্তগুলির চেয়ে আলাদা। তারিখটি তৈরি করতে এটি লোকালডেট.ওফ () এপিআই ব্যবহার করে এবং এটি অন্যান্য উত্তরগুলির চেয়ে অনেক কম সংক্ষিপ্ত (কখনও কখনও সংক্ষিপ্ত উত্তর দীর্ঘের চেয়ে ভাল) ...
আলেক্সি

9
public class TryDateFormats {
    public static void main(String[] args) throws ParseException {
        String month = "08";
        String day = "05";
        String year = "2015";
        String inputDateStr = String.format("%s/%s/%s", day, month, year);
        Date inputDate = new SimpleDateFormat("dd/MM/yyyy").parse(inputDateStr);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(inputDate);
        String dayOfWeek = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US).toUpperCase();
        System.out.println(dayOfWeek);
    }
}

চমৎকার সমাধান, আমি ঠিক এই ধরণের সমাধানটি খুঁজে পেয়েছি, আমার প্রয়োজনীয় লাইন যা আমার সমস্যার সমাধান করেছে। স্ট্রিং ডেঅফওইক = ক্যালেন্ডার.জেট ডিসপ্লে নাম (ক্যালেন্ডার। ডিওয়াইআম_আউইইকে, ক্যালেন্ডার.লং, লোকেল.ইউএস)। টু আপার কেস ();
মুহাম্মদ আজম

8

জন্য জাভা 8 বা পরবর্তী সময়ে , LOCALDATE বাঞ্ছনীয়

import java.time.LocalDate;

public static String findDay(int month, int day, int year) {

    LocalDate localDate = LocalDate.of(year, month, day);

    java.time.DayOfWeek dayOfWeek = localDate.getDayOfWeek();
    System.out.println(dayOfWeek);

    return dayOfWeek.toString();
}

নোট: যদি ইনপুট স্ট্রিং / ব্যবহারকারী সংজ্ঞায়িত, তাহলে আপনি তা বিশ্লেষণ করা উচিত int- এ


6
...
import java.time.LocalDate;
...
//String month = in.next();
int mm = in.nextInt();
//String day = in.next();
int dd = in.nextInt();
//String year = in.next();
int yy = in.nextInt();
in.close();
LocalDate dt = LocalDate.of(yy, mm, dd);
System.out.print(dt.getDayOfWeek());

5

আর একটি "মজাদার" উপায় হ'ল ডুমসডে অ্যালগরিদম ব্যবহার করা । এটি একটি দীর্ঘ দীর্ঘতর পদ্ধতি তবে আপনার যদি একটি নির্দিষ্ট তারিখ সহ কোনও ক্যালেন্ডার অবজেক্ট তৈরি করার প্রয়োজন না হয় তবে এটি আরও দ্রুত।

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 *
 * @author alain.janinmanificat
 */
public class Doomsday {

    public static HashMap<Integer, ArrayList<Integer>> anchorDaysMap = new HashMap<>();
    public static HashMap<Integer, Integer> doomsdayDate = new HashMap<>();
    public static String weekdays[] = new DateFormatSymbols(Locale.FRENCH).getWeekdays();

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws ParseException, ParseException {

        // Map is fed manually but we can use this to calculate it : http://en.wikipedia.org/wiki/Doomsday_rule#Finding_a_century.27s_anchor_day
        anchorDaysMap.put(Integer.valueOf(0), new ArrayList<Integer>() {
            {
                add(Integer.valueOf(1700));
                add(Integer.valueOf(2100));
                add(Integer.valueOf(2500));
            }
        });

        anchorDaysMap.put(Integer.valueOf(2), new ArrayList<Integer>() {
            {
                add(Integer.valueOf(1600));
                add(Integer.valueOf(2000));
                add(Integer.valueOf(2400));
            }
        });

        anchorDaysMap.put(Integer.valueOf(3), new ArrayList<Integer>() {
            {
                add(Integer.valueOf(1500));
                add(Integer.valueOf(1900));
                add(Integer.valueOf(2300));
            }
        });

        anchorDaysMap.put(Integer.valueOf(5), new ArrayList<Integer>() {
            {
                add(Integer.valueOf(1800));
                add(Integer.valueOf(2200));
                add(Integer.valueOf(2600));
            }
        });

        //Some reference date that always land on Doomsday
        doomsdayDate.put(Integer.valueOf(1), Integer.valueOf(3));
        doomsdayDate.put(Integer.valueOf(2), Integer.valueOf(14));
        doomsdayDate.put(Integer.valueOf(3), Integer.valueOf(14));
        doomsdayDate.put(Integer.valueOf(4), Integer.valueOf(4));
        doomsdayDate.put(Integer.valueOf(5), Integer.valueOf(9));
        doomsdayDate.put(Integer.valueOf(6), Integer.valueOf(6));
        doomsdayDate.put(Integer.valueOf(7), Integer.valueOf(4));
        doomsdayDate.put(Integer.valueOf(8), Integer.valueOf(8));
        doomsdayDate.put(Integer.valueOf(9), Integer.valueOf(5));
        doomsdayDate.put(Integer.valueOf(10), Integer.valueOf(10));
        doomsdayDate.put(Integer.valueOf(11), Integer.valueOf(7));
        doomsdayDate.put(Integer.valueOf(12), Integer.valueOf(12));

        long time = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {

            //Get a random date
            int year = 1583 + new Random().nextInt(500);
            int month = 1 + new Random().nextInt(12);
            int day = 1 + new Random().nextInt(7);

            //Get anchor day and DoomsDay for current date
            int twoDigitsYear = (year % 100);
            int century = year - twoDigitsYear;
            int adForCentury = getADCentury(century);
            int dd = ((int) twoDigitsYear / 12) + twoDigitsYear % 12 + (int) ((twoDigitsYear % 12) / 4);

            //Get the gap between current date and a reference DoomsDay date
            int referenceDay = doomsdayDate.get(month);
            int gap = (day - referenceDay) % 7;

            int result = (gap + adForCentury + dd) % 7;

            if(result<0){
                result*=-1;
            }
            String dayDate= weekdays[(result + 1) % 8];
            //System.out.println("day:" + dayDate);
        }
        System.out.println("time (ms) : " + (System.currentTimeMillis() - time)); //time (ms) : 80

         time = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            Calendar c = Calendar.getInstance();
            //I should have used random date here too, but it's already slower this way
            c.setTime(new SimpleDateFormat("dd/MM/yyyy").parse("12/04/1861"));
//            System.out.println(new SimpleDateFormat("EE").format(c.getTime()));
            int result2 = c.get(Calendar.DAY_OF_WEEK);
//            System.out.println("day idx :"+ result2);
        }
        System.out.println("time (ms) : " + (System.currentTimeMillis() - time)); //time (ms) : 884
    }

    public static int getADCentury(int century) {
        for (Map.Entry<Integer, ArrayList<Integer>> entry : anchorDaysMap.entrySet()) {
            if (entry.getValue().contains(Integer.valueOf(century))) {
                return entry.getKey();
            }
        }
        return 0;
    }
}

5

ইনপুট যেমন (দিন = "08", মাস = "05", বছর = "2015" এবং আউটপুট "WEDNESDAY" হবে) জন্য নিম্নলিখিত কোড স্নিপেট ব্যবহার করতে পারেন

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));
calendar.set(Calendar.MONTH, (Integer.parseInt(month)-1));
calendar.set(Calendar.YEAR, Integer.parseInt(year));
String dayOfWeek = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US).toUpperCase();

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

1
এই প্রশ্নটি হ্যাকারঙ্কে জিজ্ঞাসা করা হয়েছিল।
প্রথমেশে

5

এক লাইনের উত্তর:

return LocalDate.parse("06/02/2018",DateTimeFormatter.ofPattern("dd/MM/yyyy")).getDayOfWeek().name();

ব্যবহারের উদাহরণ:

public static String getDayOfWeek(String date){
  return LocalDate.parse(date, DateTimeFormatter.ofPattern("dd/MM/yyyy")).getDayOfWeek().name();
}

public static void callerMethod(){
   System.out.println(getDayOfWeek("06/02/2018")); //TUESDAY
}

এটি কাজ করেছে, আমার শুধু getDisplayName (TextStyle.FULL, Locale.US) দিয়ে .name () প্রতিস্থাপন করতে হবে
Gastón Saillén

3
private String getDay(Date date){

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");
    //System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase());                       
    return simpleDateFormat.format(date).toUpperCase();
}

private String getDay(String dateStr){
    //dateStr must be in DD-MM-YYYY Formate
    Date date = null;
    String day=null;

    try {
        date = new SimpleDateFormat("DD-MM-YYYY").parse(dateStr);

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");
        //System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase());
        day = simpleDateFormat.format(date).toUpperCase();


    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    return day;
}

2
LocalDate date=LocalDate.now();

System.out.println(date.getDayOfWeek());//prints THURSDAY
System.out.println(date.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.US) );  //prints Thu   
java.time.DayOfWeek is a enum which returns the singleton instance for the day-of-week of the weekday of the date.

@ আয়ারনুশ আপনার উত্তর কীভাবে গত মাসে পোস্ট করা প্রজেমেকের উত্তর ছাড়াও কোনও মূল্য যুক্ত করে ?
বাসিল বাউরক

2

হ্যাকারঙ্ক জাভা তারিখ এবং সময় সম্পর্কে একটি চ্যালেঞ্জ আছে

ব্যক্তিগতভাবে, আমি লোকালডেট ক্লাস পছন্দ করি।

  1. আমদানি করুন java.time.LocalDate
  2. "অন্তর্গত" বিন্যাসে 3 টি আর্গুমেন্ট লাগে "এর" পদ্ধতি ব্যবহার করে স্থানীয় তারিখ পুনরুদ্ধার করুন।
  3. অবশেষে, "getDayOfWeek" পদ্ধতিটি ব্যবহার করে সেই দিনের নামটি পান।

এই চ্যালেঞ্জ নিয়ে একটি ভিডিও রয়েছে।

জাভা তারিখ এবং সময় হ্যাকারঙ্ক সমাধান

আমি আশা করি এটি সাহায্য করবে :)


যদি হ্যাকারর্যাঙ্ক জাভা তারিখ এবং সময় জন্য অন্য কেউ এখানে আসেন এবং সেই শ্রেণিটি ব্যবহার করতে চান Calendar, দয়া করে নোট করুন যে setক্যালেন্ডারে পদ্ধতিটি 0 থেকে শুরু করে কয়েক মাস সময় নেয়, অর্থাৎ 0 for January,। ধন্যবাদ!
সাগর দেবকোটা

2

সর্বশেষ ইনবিল্ট পদ্ধতি ব্যবহার না করে ওপি যা চেয়েছিল ঠিক তা করার অন্য একটি উপায় যুক্ত করে:

public static String getDay(String inputDate) {
    String dayOfWeek = null;
    String[] days = new String[]{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};

    try {
        SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
        Date dt1 = format1.parse(inputDate);
        dayOfWeek = days[dt1.getDay() - 1];
    } catch(Exception e) {
        System.out.println(e);
    }

    return dayOfWeek;
}

1
এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে সে সম্পর্কে অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
অ্যালেক্স রিয়াবভ

1
এটি একাধিক উপায়ে এটি করার নিরুৎসাহিত উপায়। আপনার কোড সংকলন করা যাবে না। আপনি দীর্ঘ পুরানো এবং খারাপ ডিজাইন ক্লাস SimpleDateFormatএবং ব্যবহার করা উচিত নয় Date। বিশেষত আপনার অবচয় getDayপদ্ধতি ব্যবহার করা উচিত নয় , এটি নির্ভরযোগ্য নয়। এবং আপনার ব্যবহার করা উচিত নয় if- elsevalues ​​টি মানের মধ্যে বাছাই করার জন্য, এটি আমাদের switchজন্য যা আছে , বা আপনি কোনও অ্যারে ব্যবহার করতে পারেন। আপনার সমস্ত কোডগুলিতে এটি প্রয়োজনের তুলনায় উভয়ই দীর্ঘ এবং জটিল।
ওলে ভিভি

1
এবং আপনার নিজের সরবরাহের চেয়ে অন্তর্নির্মিত মাসের সংক্ষিপ্ত বিবরণগুলি ব্যবহার করুন। সহজ এবং কম ত্রুটি-প্রবণ।
ওলে ভিভি

1
এখানে ব্যবহৃত ঝামেলাযুক্ত ক্লাসগুলি বহু বছর আগে জাভা.টাইম ক্লাসগুলির দ্বারা দমন করা হয়েছিল । 2018 এ তাদের ব্যবহারের পরামর্শ দেওয়া হ'ল দুর্বল পরামর্শ।
তুলসী বার্ক

2
import java.text.SimpleDateFormat;
import java.util.Scanner;

class DayFromDate {

    public static void main(String args[]) {

        System.out.println("Enter the date(dd/mm/yyyy):");
        Scanner scan = new Scanner(System.in);
        String Date = scan.nextLine();

        try {
            boolean dateValid = dateValidate(Date);

            if(dateValid == true) {
                SimpleDateFormat df = new SimpleDateFormat( "dd/MM/yy" );  
                java.util.Date date = df.parse( Date );   
                df.applyPattern( "EEE" );  
                String day= df.format( date ); 

                if(day.compareTo("Sat") == 0 || day.compareTo("Sun") == 0) {
                    System.out.println(day + ": Weekend");
                } else {
                    System.out.println(day + ": Weekday");
                }
            } else {
                System.out.println("Invalid Date!!!");
            }
        } catch(Exception e) {
            System.out.println("Invalid Date Formats!!!");
        }
     }

    static public boolean dateValidate(String d) {

        String dateArray[] = d.split("/");
        int day = Integer.parseInt(dateArray[0]);
        int month = Integer.parseInt(dateArray[1]);
        int year = Integer.parseInt(dateArray[2]);
        System.out.print(day + "\n" + month + "\n" + year + "\n");
        boolean leapYear = false;

        if((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
            leapYear = true;
        }

        if(year > 2099 || year < 1900)
            return false;

        if(month < 13) {
            if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
                if(day > 31)
                    return false;
            } else if(month == 4 || month == 6 || month == 9 || month == 11) {
                if(day > 30)
                    return false;
            } else if(leapYear == true && month == 2) {
                if(day > 29)
                    return false;
            } else if(leapYear == false && month == 2) {
                if(day > 28)
                    return false;
            }

            return true;    
        } else return false;
    }
}

2

java.util.scannerপ্যাকেজ ব্যবহার করে ব্যবহারকারীর ইনপুট তারিখ মাস এবং বছর দিয়ে সপ্তাহের দিনটি সন্ধান করার প্রোগ্রাম :

import java.util.Scanner;

public class Calender {
    public static String getDay(String day, String month, String year) {

        int ym, yp, d, ay, a = 0;
        int by = 20;
        int[] y = new int[]{6, 4, 2, 0};
        int[] m = new int []{0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};

        String[] wd = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

        int gd = Integer.parseInt(day);
        int gm = Integer.parseInt(month);
        int gy = Integer.parseInt(year);

        ym = gy % 100;
        yp = ym / 4;
        ay = gy / 100;

        while (ay != by) {
            by = by + 1;
            a = a + 1;

            if(a == 4) {
                a = 0;
            }
        }

        if ((ym % 4 == 0) && (gm == 2)) {
            d = (gd + m[gm - 1] + ym + yp + y[a] - 1) % 7;
        } else
            d = (gd + m[gm - 1] + ym + yp + y[a]) % 7;

        return wd[d];
    }

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        String day = in.next();
        String month = in.next();
        String year = in.next();

        System.out.println(getDay(day, month, year));
    }
}

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

@ ডেভ পড়তে কি আসলেই ভালো লাগছে? if ((ym%4==0) && (gm==2)){ d=(gd+m[gm-1]+ym+yp+y[a]-1)%7;
পোচমুরনিক

1
Calendar cal = Calendar.getInstance(desired date);
cal.setTimeInMillis(System.currentTimeMillis());
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

বর্তমান সময়ের স্ট্যাম্প সরবরাহ করে দিনের মান পান।


1
//to get day of any date

import java.util.Scanner; 
import java.util.Calendar; 
import java.util.Date;

public class Show {

    public static String getDay(String day,String month, String year){


            String input_date = month+"/"+day+"/"+year;

            Date now = new Date(input_date);
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(now);
            int final_day = (calendar.get(Calendar.DAY_OF_WEEK));

            String finalDay[]={"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"};

            System.out.println(finalDay[final_day-1]);

    }

    public static void main(String[] args) { 
            Scanner in = new Scanner(System.in); 
            String month = in.next(); 
        String day = in.next();
            String year = in.next();

            getDay(day, month, year);
    }

}

2
কোডটির প্রশংসা করার জন্য উত্তরের কিছু ব্যাখ্যা যুক্ত করা কার্যকর হবে।
ritlew

1

নীচের পদ্ধতিটি সাত দিন পুনরুদ্ধার করে এবং কোটলিনে তালিকা অ্যারেতে দিনের সংক্ষিপ্ত নাম ফিরে আসে যদিও, আপনি কেবল জাভা ফর্ম্যাটে পুনরায় ফর্ম্যাট করতে পারেন, ঠিক কীভাবে ক্যালেন্ডার সংক্ষিপ্ত নামটি ফিরে আসতে পারে তার ধারণা উপস্থাপন করতে পারেন

private fun getDayDisplayName():List<String>{
        val calendar = Calendar.getInstance()
        val dates= mutableListOf<String>()
        dates.clear()
        val s=   calendar.getDisplayName(DAY_OF_WEEK, SHORT, Locale.US)
        dates.add(s)
        for(i in 0..5){
            calendar.roll( Calendar.DATE, -1)
            dates.add(calendar.getDisplayName(DAY_OF_WEEK, SHORT, Locale.US))
        }
        return dates.toList()
    }

ফলাফল রাখার মত ফলাফল

I/System.out: Wed
    Tue
    Mon
    Sun
I/System.out: Sat
    Fri
    Thu

1
যদি ওপি জাভা সম্পর্কে জিজ্ঞাসা করে তবে জাভা দিয়ে সাড়া দেওয়া ভাল।
মাইপেটলিয়ন

1
Calendar2019 এ আমাদের ক্লাসটি ব্যবহার করতে হবে এমন কোনও কারণ নেই It's এটি অত্যন্ত নকশাকৃত এবং দীর্ঘকালীন। পরিবর্তে আমি সুপারিশ করছি LocalDateএবং জাভা.টাইমDayOfWeek থেকে , আধুনিক জাভা তারিখ এবং সময় এপিআই
ওলে ভিভি

0

নির্দিষ্ট তারিখ পেরিয়ে আপনি সপ্তাহের দিনটি পেতে নীচের পদ্ধতিটি ব্যবহার করতে পারেন,

ক্যালেন্ডার শ্রেণীর সেট পদ্ধতির জন্য, ট্রিকি অংশটি মাসের প্যারামিটারের সূচক 0 থেকে শুরু হবে

public static String getDay(int day, int month, int year) {

        Calendar cal = Calendar.getInstance();

        if(month==1){
            cal.set(year,0,day);
        }else{
            cal.set(year,month-1,day);
        }

        int dow = cal.get(Calendar.DAY_OF_WEEK);

        switch (dow) {
        case 1:
            return "SUNDAY";
        case 2:
            return "MONDAY";
        case 3:
            return "TUESDAY";
        case 4:
            return "WEDNESDAY";
        case 5:
            return "THURSDAY";
        case 6:
            return "FRIDAY";
        case 7:
            return "SATURDAY";
        default:
            System.out.println("GO To Hell....");
        }

        return null;
    }

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

0

ক্যালেন্ডার ক্লাসে বিল্ট-ইন ডিসপ্লে নাম কার্যকারিতা রয়েছে:

Calendar.getInstance().getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault()); // Thu   

Calendar.SHORT -> Thu
Calendar.LONG_FORMAT -> Thursday

জাভা 1.6 থেকে উপলব্ধ। আরও দেখুন ওরাকল ডকুমেন্টেশন


0

এটি সঠিকভাবে কাজ করে ...

java.time.LocalDate; //package related to time and date

এটি একটি নির্দিষ্ট সপ্তাহের দিন পাওয়ার জন্য ইন-বিল্ট পদ্ধতি getDayOfWeek () সরবরাহ করে:

int t;
Scanner s = new Scanner(System.in);
t = s.nextInt();
s.nextLine();
 while(t-->0) { 
    int d, m, y;
    String ss = s.nextLine();
    String []sss = ss.split(" ");
    d=Integer.parseInt(sss[0]);
    m = Integer.parseInt(sss[1]);
    y = Integer.parseInt(sss[2]);

    LocalDate l = LocalDate.of(y, m, d); //method to get the localdate instance
    System.out.println(l.getDayOfWeek()); //this returns the enum DayOfWeek

l.getDayOfWeek()একটি স্ট্রিংয়ে এনামের মান নির্ধারণের জন্য , আপনি সম্ভবত এনুম নামক পদ্ধতিটি ব্যবহার করতে পারেন যা name()এনাম বস্তুর মান প্রদান করে।


2
স্ট্যাক ওভারফ্লোতে উত্তরগুলি যদি সেগুলির কিছু ব্যাখ্যা পাশাপাশি কোড স্নিপেট অন্তর্ভুক্ত করে তবে ভাল।
বাসিল বাউরক

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

@ অর্ডিনারি ড্রাফ্ট আপনি listHolidays.add(LocalDate.of(year, 1, 1));উত্তরে একটি যোগ করেছেন । আপনি যদি উত্তরটি উন্নত করতে চান তবে আপনার নিজের যুক্ত করা উচিত। আশা করি এটি সাহায্য করে
ডেভিড

হ্যাঁ, আমি পরে আপনার সংস্করণটির সাথে তুলনা করতে আমার সম্পাদনাটি পরীক্ষা করেছিলাম। মনে হচ্ছে ভুল করে আমি সেই লাইনটি অনুলিপি করেছি।
পোচমুরনিক

-3

নীচে আপনার প্রয়োজনীয়তার জন্য জাভা 1.8 টাইম এপিআই ব্যবহার করে দুটি স্নিপেটের নীচে রয়েছে।

LocalDate localDate = LocalDate.of(Integer.valueOf(year),Integer.valueOf(month),Integer.valueOf(day));
String dayOfWeek = String.valueOf(localDate.getDayOfWeek());

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