Нужно получить субботу дату недели в linux C - PullRequest
1 голос
/ 30 июля 2010

Я пытаюсь получить субботнюю дату недели в Linux C. Используя функцию time и localtime, я получил сегодняшнюю информацию о дате и времени.Как продолжить, чтобы получить субботнюю дату?


#include <time.h> 
#include <stdio.h> 
#include <string.h> 
int main() 
{ 
char date[20]; 
struct tm *curr_tm = NULL; 
time_t curr_time; 
curr_time = time(NULL); 
curr_tm = localtime(&curr_time); 
curr_tm->tm_wday = 6; 
//Refers to saturday. 
printf("new date %d\t%d\t%d\n", curr_tm->tm_mday, curr_tm->tm_mon, curr_tm->tm_year+1900); 
return 1; 
}

Как мне поступить с этим?

Ответы [ 2 ]

3 голосов
/ 30 июля 2010
struct tm orig;
// ...
// struct tm correctly set with everything within range.
orig.tm_mday += 6 - orig.tm_wday;
mktime(&orig);

tm_mday - количество дней с воскресенья.Таким образом, 6 минус - это количество дней до субботы (если сегодня суббота, то она ничего не делает).Это выводит структуру из диапазона, который mktime исправляет.

РЕДАКТИРОВАТЬ:

curr_time->tm_mday += 6 - curr_time->tm_wday;
mktime(curr_time);
2 голосов
/ 30 июля 2010

Исходя из вашего кода, следующее будет вам в следующую субботу (если сегодня суббота).

#include <time.h>
#include <stdio.h>
#include <string.h>
int main() {
    char date[20];
    struct tm *curr_tm = NULL;
    time_t curr_time;
    curr_time = time(NULL);
    curr_tm = localtime(&curr_time);

    // Add the difference between todays day of week and Saturday, then re-make.
    curr_tm->tm_mday += 6 - curr_tm->tm_wday;
    mktime (curr_tm);

    printf("new date %d\t%d\t%d\n",
        curr_tm->tm_mday, curr_tm->tm_mon+1, curr_tm->tm_year+1900);
    return 1;
}

Вы можете заменить строку curr_tm->tm_mday += 6 - curr_tm->tm_wday; на:

curr_tm->tm_mday += (curr_tm->tm_wday == 6) ? 7 : 6 - curr_tm->tm_wday;

чтобы получить в следующую субботу, даже если сегодня суббота.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...