2016-11-18 33 views
0

我想在C中打印給定日期的整個星期的函數。此功能的參數是日,月和年。我知道如何獲得當前的日期和時間,但我不知道如何繼續這個。我想用struct tm來做這件事,並且以這種方式搜索權利周。幫助表示讚賞! 我一直在試圖至今:如何在C中打印給定日期的整個星期的函數?

void week(int day, int month, int year) { 
struct tm *a = tm_mday(month) /* set a to right month?*/ } 

例如:

int day = 15 
int month = 11 
int year = 2016 

輸出是:

Monday 14.11.2016 
Tuesday 15.11.2016 
Wednesday 16.11.2016 
Thursday 17.11.2016 
Friday 18.11.2016 
Saturday 19.11.2016 
Sunday 20.11.2016 
+1

到目前爲止請顯示您的研究/調試工作。請先閱讀[問]頁面。 –

+0

查找使用的星期幾。 https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week;然後再做一些編碼來打印本週。 – 0aslam0

回答

0

看一看asctime(3)。

#include <time.h> 

char *asctime(const struct tm *tm); 

struct tm { 
    int tm_sec;   /* seconds */ 
    int tm_min;   /* minutes */ 
    int tm_hour;  /* hours */ 
    int tm_mday;  /* day of the month */ 
    int tm_mon;   /* month */ 
    int tm_year;  /* year */ 
    int tm_wday;  /* day of the week */ 
    int tm_yday;  /* day in the year */ 
    int tm_isdst;  /* daylight saving time */ 
}; 

asctime()以struct tm *作爲參數。 它返回一個字符串,如「Wed Jun 30 21:49:08 1993 \ n」。 然後你可以操縱字符串。

0
#include <time.h> 

const int day = 24 * 60 * 60; // assuming POSIX-time. 

void week(int day, int month, int year) { 

    // TODO: Validate input arguments 

    struct tm arg = { 
     .tm_year = 1900 - year, 
     .tm_mon = month - 1, 
     .tm_mday = day 
    }; 

    time_t arg_time = mktime(&arg); 
    if(arg_time == -1) exit(EXIT_FAILURE); 

    time_t start_of_week = arg_time - (arg.tm_wday * day); 

    char buffer[100] = {0}; 

    for(int i = 0; i < 7; i++) { 

     struct tm* day_of_week = gmtime(start_of_week + (i * day)); 

     size_t length = strftime(buffer, 99, "%A %d.%m.%Y", day_of_week); 
     if(length < 10) exit(EXIT_FAILURE); 
     puts(buffer); 
    } 
} 

我相信我的解決方案適用於大多數情況,但有一個有趣的錯誤在裏面,你可以找到它? :)

+0

[strftime(3)](http://man7.org/linux/man-pages/man3/strftime.3.html)需要格式規範字符串中的'%'。你可能是指''%A%d。%m。%Y'' –

+0

@BasileStarynkevitch謝謝,我解決了這個問題 - 但那不是我指的錯誤:) – Dai

+0

而'gmtime'(可能應該是'localtime' ...)需要一些Unix紀元時間。我不確定你總是有一個有效的。 –

相關問題