3

入力日でどの日を取得するにはどうすればよいですか?

入力日の例:2012年8月15日

C ++を使用して、月曜日、火曜日、または曜日を知るにはどうすればよいですか。

月の利用可能日から週末を省略しようとしているので、たとえば2012年8月の月を入力すると、土曜日と日曜日を確認したいので、利用可能日から除外できます。私のプログラムのために。

1か月の日数を取得するために試したコード:

if (month == 4 || month == 6 || month == 9 || month == 11)
{
    maxDay = 30;
}
else if (month == 2)
//{
//  bool isLeapYear = (year% 4 == 0 && year % 100 != 0) || (year % 400 == 0);
//  if (isLeapYear)
//  { 
//   maxDay = 29;
//  }
//else
{
    maxDay = 28;
}

次に知りたいのは、その月の週末です。結果からそれを省略できます。

4

5 に答える 5

5
#include <ctime>

std::tm time_in = { 0, 0, 0, // second, minute, hour
        4, 9, 1984 - 1900 }; // 1-based day, 0-based month, year since 1900

std::time_t time_temp = std::mktime( & time_in );

// the return value from localtime is a static global - do not call
// this function from more than one thread!
std::tm const *time_out = std::localtime( & time_temp );

std::cout << "I was born on (Sunday = 0) D.O.W. " << time_out->tm_wday << '\n';

日付から曜日へのアルゴリズム?

于 2012-08-15T15:39:24.900 に答える
3

私は使用しますmktime()。日、月、年を指定して、 を入力しtm、それを呼び出しますmktime

tm timeStruct = {};
timeStruct.tm_year = year - 1900;
timeStruct.tm_mon = month - 1;
timeStruct.tm_mday = day;
timeStruct.tm_hour = 12;    //  To avoid any doubts about summer time, etc.
mktime( &timeStruct );
return timeStruct.tm_wday;  //  0...6 for Sunday...Saturday
于 2012-08-15T15:49:25.693 に答える
2

これは、追加のライブラリのインポートを必要としないため、よりシンプルでおそらくより優れた実装です。返される結果は、0 から 6 までの整数 (日曜日、月曜日、火曜日... 土曜日) です。

#include <iostream>

int dayofweek(int d, int m, int y){
    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
    y -= m < 3;
    return ( y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

/* Driver function to test above function */
int main(){
    int day = dayofweek(23, 10, 2013); 
    // Above statement finds the week day for 10/23/2013
    //dayofweek(<day in month>,<month>,<year>)
    std::cout << day;
    return 0;
}
于 2014-10-10T19:48:07.370 に答える
1

mktimeandを使用して、構造体のフィールドをctime抽出する必要があります。はそのフィールドを必要としないことが保証されているため、スケルトン構造にデータを入力し、処理して完全な構造に分解することができます。tm_wdaytmmktimetm

#include <ctime>

std::tm t = {};
t.tm_mday = 15;
t.tm_mon = 8;
t.tm_year = 2012;

std::tm * p = std::localtime(std::mktime(&t));

// result is p->tm_wday
于 2012-08-15T15:40:01.770 に答える
0
#include <stdio.h>
#include <time.h>

int main ()
{
  char *str = "15-08-2012";
  struct tm tm; 
  if (strptime (str, "%d-%m-%Y", &tm) == NULL) {
    /* Bad format !! */
  }
  char buffer [80];
  strftime (buffer, 80, "Day is %a", &tm);
  puts (buffer);    
  return 0;
}
于 2012-08-15T15:42:53.623 に答える