विशिष्ट तिथि पास करके सप्ताह का दिन कैसे निर्धारित करें?


187

उदाहरण के लिए मेरे पास तारीख है: "23/2/2010" (23 फरवरी 2010)। मैं इसे एक समारोह में पारित करना चाहता हूं, जो सप्ताह का दिन लौटाएगा । मैं यह कैसे कर सकता हूँ?

इस उदाहरण में, फ़ंक्शन को String"Tue" वापस करना चाहिए ।

इसके अतिरिक्त, यदि केवल दिन का क्रम वांछित है, तो इसे कैसे प्राप्त किया जा सकता है?

जवाबों:


350

हाँ। आपके सटीक मामले पर निर्भर करता है:

  • आप उपयोग कर सकते हैं java.util.Calendar:

    Calendar c = Calendar.getInstance();
    c.setTime(yourDate);
    int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
  • यदि आपको Tue3 के बजाय आउटपुट की आवश्यकता होती है (सप्ताह के दिनों को रविवार के लिए 1 पर शुरू किया जाता है, तो कैलेंडर देखें। कैलेंडर देखें), कैलेंडर के माध्यम से जाने के बजाय, बस स्ट्रिंग को पुन: स्वरूपित करें: new SimpleDateFormat("EE").format(date)( EEजिसका अर्थ है "सप्ताह का दिन, लघु संस्करण" )

  • यदि आपके पास स्ट्रिंग के रूप में आपका इनपुट है, तो इसके बजाय Date, आपको SimpleDateFormatइसे पार्स करने के लिए उपयोग करना चाहिए :new SimpleDateFormat("dd/M/yyyy").parse(dateString)

  • आप joda-time का उपयोग कर सकते हैं DateTimeऔर कॉल dateTime.dayOfWeek()और / या कर सकते हैं DateTimeFormat

  • संपादित करें: जावा 8 के बाद से अब आप joda.time के बजाय java.time पैकेज का उपयोग कर सकते हैं


20
सप्ताह के दिन, 1 जो रविवार से शुरू है तो मुझे लगता है मंगल 3. होगा
मोहम्मद Banisaeid

13
अन्य बातों से सावधान रहने के लिए, यदि आप कैलेंडर ऑब्जेक्ट में पूर्णांक का उपयोग करके दिनांक निर्धारित करते हैं (स्ट्रिंग को पार्स करने के माध्यम से नहीं), तो ध्यान रखें कि महीने की संख्या शून्य-आधारित है, इसलिए जनवरी 0 और दिसंबर 11 है
RenniePet

4
@ रेनीपेट: अच्छा। इसके अलावा आप Calendarकक्षा में स्थिरांक का उपयोग कर सकते हैं , जैसे Calendar.SUNDAYया Calendar.JANUARY
मोहम्मद बानसीद

2
जब यह लिखा गया था तो यह जवाब बहुत अच्छा था। आज आप अब पुरानी कक्षाओं Calendar, Dateऔर DateTimeFormat(और जोडा समय भी) चाहते हैं और java.timeउदाहरण के लिए YearMonthया , जावा 8 कक्षाओं का उपयोग करेंगे LocalDateइस उत्तर में और देखें ।
ओले वीवी

4
FYI करें, जैसे परेशानी पुराने तिथि-समय कक्षाएं java.util.Date, java.util.Calendarऔर java.text.SimpleDateFormatअब कर रहे हैं विरासत , द्वारा का स्थान ले लिया 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);

इनपुट कोड से दिन का नाम खोजने के लिए इस कोड का उपयोग करें। पर्याप्त और अच्छी तरह से परीक्षण किया गया।


1
यदि आप इस विधि का उपयोग करते हैं, तो दिनों और महीनों के क्रम का ध्यान रखें।
जोएल क्रिस्टोफेल

1
मुझे लगता है कि आपको इसे एक कोशिश में पकड़ने की ज़रूरत है ब्लॉक
Shafaet

1
FYI करें, जैसे परेशानी पुराने तिथि-समय कक्षाएं java.util.Date, java.util.Calendarऔर java.text.SimpleDateFormatअब कर रहे हैं विरासत , द्वारा का स्थान ले लिया java.time जावा 8 और जावा 9. देखें में बनाया गया वर्गों ओरेकल द्वारा ट्यूटोरियल
तुलसी Bourque

एंड्रॉइड केवल एपीआई 26 के बाद लोकलडेट को लागू करता है।
जैकब

29

बस SimpleDateFormat का उपयोग करें

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);

परिणाम है: Sat, 28 Dec 2013

डिफ़ॉल्ट निर्माता "डिफ़ॉल्ट" लोकेल ले रहा है , इसलिए जब आपको एक विशिष्ट पैटर्न की आवश्यकता होती है, तो इसका उपयोग करने में सावधानी बरतें।

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

21

tl; डॉ

Java.time का उपयोग करना ...

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

ऊपर मेरा उदाहरण कोड देखें, और Przemek द्वारा java.time के लिए सही उत्तर देखें

क्रमसूचक संख्या

यदि बस दिन का समय वांछित है, तो इसे कैसे प्राप्त किया जा सकता है?

क्रमिक संख्या के लिए, DayOfWeekइस तरह के बजाय एनम ऑब्जेक्ट के आसपास से गुजरने पर विचार करें DayOfWeek.TUESDAY। ध्यान रखें कि एक DayOfWeekस्मार्ट ऑब्जेक्ट है, न कि केवल एक स्ट्रिंग या मात्र पूर्णांक संख्या। उन enum ऑब्जेक्ट्स का उपयोग करना आपके कोड को अधिक स्व-दस्तावेजीकरण बनाता है, मान्य मान सुनिश्चित करता है, और प्रकार-सुरक्षा प्रदान करता है

लेकिन अगर आप जोर देते हैं, तो DayOfWeekएक नंबर के लिए पूछें । आपको आईएसओ 8601 मानक के अनुसार सोमवार-रविवार के लिए 1-7 मिलेंगे ।

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

Joda समय

अद्यतन: जोडा-टाइम परियोजना अब रखरखाव मोड में है। टीम java.time कक्षाओं की ओर पलायन की सलाह देती है। Java.time फ्रेमवर्क जावा 8 में बनाया गया है (साथ ही जावा 6 और 7 के लिए वापस पोर्ट किया गया है और आगे एंड्रॉइड के लिए अनुकूलित है )।

यहाँ उदाहरण कोड कोड का उपयोग कर रहा है , जो कि Bozho द्वारा स्वीकार किए गए उत्तर में उल्लिखित है, जैसा कि Joda-Time Library संस्करण 2.4 है । Joda.util.ate/.Calendar क्लासेस जावा के साथ बंडल करके Joda-Time कहीं बेहतर है।

LocalDate

Joda- समय प्रदान करता है LocalDate कक्षा को बिना किसी समय-दिन या समय क्षेत्र के केवल तारीख का प्रतिनिधित्व करने की । बस यह प्रश्न किसके लिए कहता है। जावा के साथ पुराने java.util.Date/.Calendar क्लासेस में इस अवधारणा का अभाव है।

पार्स

स्ट्रिंग को दिनांक मान में पार्स करें।

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

उद्धरण

सप्ताह संख्या और नाम के दिन के मूल्य को निकालें।

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 );

Daud

जब चला।

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

जावा के बारे में

Java.time ढांचे जावा 8 और बाद में बनाया गया है। इन कक्षाओं परेशानी वर्ष प्रतिस्थापित विरासत जैसे तिथि-समय कक्षाएं java.util.Date, Calendar, और SimpleDateFormat

Joda समय परियोजना, अब में रखरखाव मोड , प्रवास करने की सलाह देता java.time कक्षाएं।

अधिक जानने के लिए, Oracle ट्यूटोरियल देखें । और कई उदाहरणों और स्पष्टीकरणों के लिए ढेर अतिप्रवाह खोजें। विशिष्टता JSR 310 है

Java.time कक्षाएं कहाँ से प्राप्त करें?

ThreeTen-अतिरिक्त परियोजना अतिरिक्त कक्षाओं के साथ java.time फैली हुई है। यह परियोजना java.time के लिए भविष्य के संभावित अतिरिक्त के लिए एक साबित जमीन है। आप यहाँ कुछ उपयोगी वर्गों जैसे मिल सकता है Interval, YearWeek, YearQuarter, और अधिक


15

java.time

java.timeजावा 8 और बाद में निर्मित फ्रेमवर्क का उपयोग करना ।

Enum दिन के नाम स्वचालित रूप से मानव भाषा और एक की सांस्कृतिक मानदंडों को स्थानीय के एक स्ट्रिंग उत्पन्न कर सकते हैं । यह निर्दिष्ट करने के लिए कि आप लंबे रूप या संक्षिप्त नाम चाहते हैं।DayOfWeek 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
@codepeaker जावा- टाइम कार्यक्षमता का अधिकांश भाग थ्री-बैकपोर्ट प्रोजेक्ट में जावा 6 और जावा 7 में वापस पोर्ट किया गया है । तीनटीनबप में पहले के एंड्रॉइड (<26) के लिए अनुकूलित । देखें कि थ्रीटेबैप का उपयोग कैसे करें…
तुलसी बोर्क

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
यह एक अच्छा जवाब है, और यह पिछले सभी से अलग है। यह तारीख बनाने के लिए LocalDate.of () API का उपयोग करता है, और यह अधिकांश अन्य उत्तरों की तुलना में बहुत छोटा है (कभी-कभी छोटा उत्तर लंबे समय से बेहतर होता है) ...
Alexey

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);
    }
}

अच्छा समाधान, मुझे इस प्रकार का समाधान मिल रहा था, मेरी आवश्यक लाइन जिसने मेरी समस्या को हल किया। स्ट्रिंग dayOfWeek = Calendar.getDisplayName (Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US) .toUpperCase ();
मुहम्मद आज़म

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();
}

नोट: यदि इनपुट स्ट्रिंग / उपयोगकर्ता परिभाषित है, तो आपको इसे इंट में पार्स करना चाहिए ।


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
इस उत्तर की सलाह दी जाती है, जो पुराने जमाने के समय की परेशानियों का उपयोग करते हैं, जो अब आधुनिक java.time कक्षाओं द्वारा विरासत में हैं।
बेसिल बॉर्क

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)
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.

@Ayarnush पिछले महीने पोस्ट किए गए Przemek द्वारा दिए गए उत्तर से परे आपका उत्तर किसी भी मूल्य को कैसे जोड़ता है ?
बेसिल बोर्क

2

हैकर्रानक पर एक चुनौती है Java Date and Time

व्यक्तिगत रूप से, मैं लोकलडेट श्रेणी को पसंद करता हूं।

  1. आयात java.time.LocalDate
  2. "इन" प्रारूप में 3 तर्क लेता है जो "विधि" का उपयोग करके लोकलडेट को पुनः प्राप्त करें।
  3. अंत में, "getDayOfWeek" पद्धति का उपयोग करके उस दिन का नाम प्राप्त करें।

इस चुनौती पर एक वीडियो है।

Java Date and Time Hackerrank solution

मुझे उम्मीद है इससे मदद मिलेगी :)


यदि कोई अन्य हैकररैंक जावा दिनांक और समय के लिए यहां आ रहा है और उस 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- else7 मानों के बीच चयन करने के लिए, यह हमारे पास switchहै, या आप किसी सरणी का उपयोग कर सकते हैं। आपके सभी कोड में सभी लंबे समय तक और अधिक जटिल है, जितना कि इसकी आवश्यकता है।
ओले वीवी

1
और अपनी खुद की आपूर्ति के बजाय अंतर्निहित महीने के संक्षिप्त रूपों का उपयोग करें। सरल और कम त्रुटि-प्रवण।
ओले वीवी

1
यहाँ इस्तेमाल की जाने वाली परेशान करने वाली कक्षाएं सालों पहले java.time क्लासेस द्वारा दबा दी गई थीं । 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));
    }
}

FYI करें, जैसे परेशानी पुराने तिथि-समय कक्षाएं java.util.Date, java.util.Calendarऔर java.text.SimpleDateFormatअब कर रहे हैं विरासत , द्वारा का स्थान ले लिया 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
कोड की प्रशंसा करने के लिए उत्तर के कुछ स्पष्टीकरण को जोड़ना उपयोगी होगा।
रीतलेव

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 में कक्षा का उपयोग करना चाहिए। यह खराब तरीके से डिज़ाइन किया गया है और लंबे समय तक पुराना है। इसके बजाय मेरा सुझाव है LocalDateऔर DayOfWeekसे java.time, आधुनिक जावा दिनांक और समय एपीआई
ओले वीवी

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
यह उत्तर अशुभ है, पुराने पुराने समय की कक्षाओं का उपयोग करते हुए, जो अब विरासत हैं, java.time कक्षाओं द्वारा दबा दी गई हैं। इसके अलावा, इस कोड में समय क्षेत्र के महत्वपूर्ण मुद्दे की अनदेखी करने के बाद अजीबोगरीब तरीके से एक तिथि-समय वर्ग को केवल-तिथि समस्या के लिए लागू किया जाता है। इसके बजाय, Przemek द्वारा java.time के लिए सही उत्तर देखें ।
बेसिल बोर्के

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

Enum के मान l.getDayOfWeek()को एक स्ट्रिंग पर नियत करने के लिए, आप शायद Enum की पद्धति का उपयोग कर सकते हैं, जिसे name()Enum ऑब्जेक्ट का मान लौटाता है।


2
स्टैक ओवरफ्लो पर उत्तर बेहतर होते हैं यदि वे कुछ स्पष्टीकरण के साथ-साथ कोड स्निपेट भी शामिल करते हैं।
बेसिल बोर्के

@ डेविड, मैं अपने संपादन और आपके अंतर में तलाश कर रहा हूं, मुझे यह नहीं मिल रहा है। कैसे संपादित करने के लिए जानकारी प्राप्त करने के लिए अच्छा होगा।
पोचमर्निक

@OrdinaryDraft आपने 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 अच्छे उत्तरों में शामिल हो चुका है। मुझे इस डुप्लिकेट द्वारा कोई मूल्य नहीं मिला है।
तुलसी बोर्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.