如何在C语言中使用未来时间获取日期

如何在C语言中使用未来时间获取日期,c,C,我想提前两个小时确定日期。 目前我正在尝试这样做:在小时值中添加2 void printTodayFutureTime() { char finalDate[50]; time_t t; struct tm *date; memset(finalDate, '\0', 50); t = time(NULL); date = localtime(&t); if(date ==

我想提前两个小时确定日期。 目前我正在尝试这样做:在小时值中添加2

void printTodayFutureTime()
{
        char finalDate[50];
        time_t t;
        struct tm *date;

        memset(finalDate, '\0', 50);

        t = time(NULL);
        date = localtime(&t);
        if(date == NULL)
        {
                printf("Unable to get localtime\n\n");
                return;
        }

        int today = date->tm_mday;
        int month = date->tm_mon + 1;
        int year = date->tm_year + 1900;
        int hour = date->tm_hour;
        int minute = date->tm_min;
        int sec = date->tm_sec;

        snprintf(finalDate, 50, "%d-%d-%dT%d:%d:%d", year, month, today, hour + 2, minute, sec);

        printf("Today's date with future time is: %s\n\n", finalDate);
}
但是如果时间是22,23,这将不起作用,因为它将跳到24和25。。。
任何人都可以给我一些建议或帮助。

即使你设法解决了午夜的问题,也要考虑夏令时和包装月份,这意味着你还必须考虑闰年。。。不要去那里

相反,在将时间转换为
time\t
之前,只需在时间上增加2小时(2*60*60秒)就容易多了:

    t = time(NULL) + 2 * 60 * 60;
    date = localtime(&t);

这要可靠得多,因为
时间\u t
只是自某个定义明确的时代以来的秒数。

即使你设法解决了午夜的问题,也要考虑夏令时和包装月份,这意味着你还必须考虑闰年。。。不要去那里

相反,在将时间转换为
time\t
之前,只需在时间上增加2小时(2*60*60秒)就容易多了:

    t = time(NULL) + 2 * 60 * 60;
    date = localtime(&t);

这要可靠得多,因为
time\u t
只是一些定义良好的历元之后的秒数。

以下是所有标准时间操作函数的描述如果使用
mktime
系统函数,它将自动调整传递给它的
struct tm
值,即使超出正常范围。以下是所有标准时间操纵功能的说明,如果您使用
mktime
系统功能,它将自动调整您传递的
struct tm
值,即使它们超出正常范围。请注意,即使
时间\t
值通常表示为秒数,C也不能保证这一点。向时间\t值添加秒数是不可移植的,因此最好使用标准库函数来处理返回值。有关详细信息,请参阅此答案:请注意,尽管
time\t
值通常表示为秒数,但C无法保证这一点。向time\t值添加秒数是不可移植的,因此最好使用标准库函数来处理返回值。有关详细信息,请参阅此答案: