C Program to find day of week given date

后端 未结 14 1284
梦谈多话
梦谈多话 2020-11-29 05:14

Is there a way to find out day of the week given date in just one line of C code?

For example

Given 19-05-2011(dd-mm-yyyy) gives me Thursday

相关标签:
14条回答
  • 2020-11-29 05:38

    As reported also by Wikipedia, in 1990 Michael Keith and Tom Craver published an expression to minimise the number of keystrokes needed to enter a self-contained function for converting a Gregorian date into a numerical day of the week.

    The expression does preserve neither y nor d, and returns a zero-based index representing the day, starting with Sunday, i.e. if the day is Monday the expression returns 1.

    A code example which uses the expression follows:

    int d    = 15   ; //Day     1-31
    int m    = 5    ; //Month   1-12`
    int y    = 2013 ; //Year    2013` 
    
    int weekday  = (d += m < 3 ? y-- : y - 2, 23*m/9 + d + 4 + y/4- y/100 + y/400)%7;  
    

    The expression uses the comma operator, as discussed in this answer.

    Enjoy! ;-)

    0 讨论(0)
  • 2020-11-29 05:39

    Here is a simple code that I created in c that should fix your problem :

    #include <conio.h>
    
    int main()
    {
      int y,n,oy,ly,td,a,month,mon_,d,days,down,up; // oy==ordinary year, td=total days, d=date
    
        printf("Enter the year,month,date: ");
        scanf("%d%d%d",&y,&month,&d);
        n= y-1; //here we subtracted one year because we have to find on a particular day of that year, so we will not count whole year.
        oy= n%4;
    
        if(oy==0) // for leap year
          {
             mon_= month-1;
             down= mon_/2;  //down means months containing 30 days.
               up= mon_-down; // up means months containing 31 days.
               if(mon_>=2)
                 {
                   days=(up*31)+((down-1)*30)+29+d; // here in down case one month will be of feb so we subtracted 1 and after that seperately
                   td= (oy*365)+(ly*366)+days;      // added 29 days as it is the if block of leap year case.
                 }
               if(mon_==1)
                 {
                   days=(up*31)+d;
                   td= (oy*365)+(ly*366)+days;
                 } 
               if(mon_==0)
                 {
                   days= d;
                   td= (oy*365)+(ly*366)+days;
                 }    
          }
        else
          {
             mon_= month-1;
             down= mon_/2;
               up= mon_-down;
               if(mon_>=2)
                 {
                   days=(up*31)+((down-1)*30)+28+d;
                   td= (oy*365)+(ly*366)+days;
                 }
               if(mon_==1)
                 {
                   days=(up*31)+d;
                   td= (oy*365)+(ly*366)+days;
                 } 
               if(mon_==0)
                 {
                   days= d;
                   td= (oy*365)+(ly*366)+days;
                 }    
          }  
    
        ly= n/4;
         a= td%7;
    
         if(a==0)
           printf("\nSunday");
         if(a==1)
           printf("\nMonday");
         if(a==2)
           printf("\nTuesday");
         if(a==3)
           printf("\nWednesday");
         if(a==4)
           printf("\nThursday");
         if(a==5)
           printf("\nFriday");
         if(a==6)
           printf("\nSaturday");
      return 0;   
    }
    
    0 讨论(0)
提交回复
热议问题