【发布时间】:2019-06-15 18:55:36
【问题描述】:
我编写了一个小函数来将 UTC 中的日期和时间转换为 UNIX 时间(纪元时间)。然而,我得到的价值取决于我所在的时区。
这里是代码
#include<stdio.h>
#include<time.h>
time_t GenerateUnixTimeStampFromDateAndTime(char *DateAndTime);
void main()
{
long int UnixTime=0;
char *CurrentTime="01/22/2019 06:30:00";
UnixTime = (long int)GenerateUnixTimeStampFromDateAndTime(CurrentTime);
printf("Current Unix Time= %ld\r\n", UnixTime);
}
time_t GenerateUnixTimeStampFromDateAndTime(char *DateAndTime)
{
struct tm ti={0};
if( sscanf(DateAndTime, "%d/%d/%d %d:%d:%d", &ti.tm_mon, &ti.tm_mday, &ti.tm_year, &ti.tm_hour, &ti.tm_min, &ti.tm_sec) != 6 )
return -1;
ti.tm_year = ti.tm_year - 1900;
ti.tm_mon = ti.tm_mon - 1;
return mktime(&ti);
}
我得到的答案是 1548118800,即 01/22/2019 01:00:00 即 -5:30,这是我所在的时区(印度)。如果我将我的 PC 时区更改为 UTC,那么它会给出正确的值 1548138600。
我需要进行哪些更改才能使其与时区无关?
【问题讨论】:
-
将 LC_TIME 区域设置为“UTC”。
-
@KamilCuk 这是操作系统级别的命令还是c代码级别的命令?