我在c中使用了以下代码来进行时间戳处理。 新加坡时区应为 UTC+08。但结果却是 0000
time_t now;
time(&now);
char ts[sizeof "1970-01-01T00:00:00+00:00"];
strftime(ts, sizeof ts, "%FT%T%z", gmtime(&now));
输出为“2024-03-28T03:20:13+0000” 时间也错了。应该是 11:20,但显示为 03:20。 我该如何改变?
您似乎正在使用
gmtime()
函数,它将时间转换为协调世界时 (UTC) 时区,因此输出中为“+0000”。要获取新加坡时区 (UTC+08:00) 的时间,您应该使用 localtime()
函数而不是 gmtime()
。不过,由于localtime()
会针对系统本地时区进行调整,因此您需要手动将其调整为新加坡时区。
以下是修改代码以获取新加坡时区时间的方法:
#include <stdio.h>
#include <time.h>
int main() {
time_t now;
time(&now);
// Get the time structure in local time zone
struct tm *local_time = localtime(&now);
// Adjust for Singapore time zone (+08:00)
local_time->tm_hour += 8;
// Correct hour if it exceeds 24
if (local_time->tm_hour >= 24) {
local_time->tm_hour -= 24;
}
char ts[sizeof "1970-01-01T00:00:00+08:00"];
strftime(ts, sizeof ts, "%FT%T%z", local_time);
printf("%s\n", ts);
return 0;
}
此代码调整从
localtime()
获取的时间结构的小时以匹配新加坡时区。然后,它使用 strftime()
和“%z”格式说明符来格式化时间戳以包含时区信息。
请注意,此解决方案假设新加坡的时区偏移始终为 UTC+08:00,这在夏令时更改期间可能不准确。如果您需要处理夏令时更改,您可能需要使用更复杂的方法或提供时区处理功能的库。