我在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分. 我该如何进行更改?
我在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()
获得的时间 struct 的小时,以匹配新加坡时区.然后,它使用带有"% z"格式说明符的strftime()
来格式化时间戳,以包括时区信息.
请注意,此解决方案假设新加坡的时区偏移始终为UTC +08:00,这在夏令时更改时可能不准确.如果您需要处理夏令时的更改,您可能需要使用更复杂的方法或提供时区处理功能的库.