我试图用C语言区分两个日期,但是我收到了这样的输出:
未来日期:2013年11月18日22:8
当前日期:2013年11月18日22:8
我的代码来了:
#include <stdio.h>
#include <time.h>
int main(int argc, char *argv[])
{
// 2 years ahead
time_t unixtime = time(NULL);
struct tm *future = localtime(&unixtime);
future->tm_year += 2;
// current time
time_t unixtime_now = time(NULL);
struct tm *current = localtime(&unixtime_now);
printf("future date: %d-%d-%d %d:%d\n", future->tm_mday, 1 + future->tm_mon, 1900 + future->tm_year, future->tm_hour, future->tm_min);
printf("current date: %d-%d-%d %d:%d\n", current->tm_mday, 1 + current->tm_mon, 1900 + current->tm_year, current->tm_hour, current->tm_min);
return 0;
}
最佳答案
localtime
的返回值是指向静态分配结构的指针,该结构可能会被对日期/时间函数的进一步调用覆盖。如果要将指向的数据保留更长时间,则需要对其进行复制,或使用其他函数,如localtime_r
。
参见localtime(3) man page:
函数的作用是:将日历时间timep转换为分解的时间表示,表示为相对于用户指定时区的时间。此函数的作用类似于调用tzset(3),并将外部变量tzname与当前时区、协调世界时(UTC)与本地标准时间(以秒为单位)之间的差的时区和夏令时(如果夏令时规则在一年中的某个时间段适用)的信息设置为非零值。返回值指向静态分配的结构,该结构可能会被随后对任何日期和时间函数的调用所覆盖。函数的作用是相同的,但它将数据存储在用户提供的结构中。它不需要设置tzname、时区和日光。
关于c - C时差,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20057990/