c - localtime() 在 C 中给出了错误的日期

标签 c localtime

我正在尝试使用 C'localtime() 函数打印计算机上的本地时间;

我的区域设置的默认格式是mm/dd/yyyy,所以 预期输出为:03/04/2023 12:51:43 但我得到:04/02/2023 12:51:43 我在想,也许本地时间函数不遵循 mm/dd/yyyy,除了月份(后面加 1)之外,一切都会正确?这真的让我很困惑。 这是我的代码:

#include <time.h>
#include <stdio.h>
int main(void)
{
    time_t rawtime = time(NULL);
    struct tm *ptime = localtime(&rawtime);
    printf("The time is: %02d/%02d/%04d %02d:%02d:%02d\n",
           ptime->tm_mday, ptime->tm_mon, ptime->tm_year + 1900,
           ptime->tm_hour, ptime->tm_min, ptime->tm_sec);
    return 0;
}

我见过很多关于 localtime() 给出错误时间的问题,这是由于时区造成的,但我不知道这个问题是什么原因造成的; 谁能帮助发现我做错了什么? 谢谢!

最佳答案

tm_mon 字段指定自 1 月以来的月数,因此对于 3 月份,该字段的值为 2。

此外,您的输出会先显示日期,后跟月份,因为这是您打印它们的顺序。

要正确打印月份,并首先打印月份,您需要:

printf("The time is: %02d/%02d/%04d %02d:%02d:%02d\n",
       ptime->tm_mon + 1, ptime->tm_mday, ptime->tm_year + 1900,
       ptime->tm_hour, ptime->tm_min, ptime->tm_sec);

关于c - localtime() 在 C 中给出了错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75637704/

相关文章:

控制可能到达非 void 函数的末尾。频率

sqlite - SQLite 中的 UTC 时间错误

java - Time.valueOf 方法返回错误值

javascript - 如何显示本地时间(考虑时区)?

c++ - 使用逻辑运算符时无法理解执行情况

C - 如何在 for 循环中每次在不同的变量上迭代相同的指令

C重新分配一个typedef?

c - 读取 mini-XML 2.7 中的多行字段时出现问题

java - Java计算两个时间之间的时间差

1970 年格式化之前的 Perl 纪元时间