C语言将UTC时间字符串转换为IST时间
Convert the time string of UTC to IST time in C language
我正在 C 程序中寻找 UTC(从 RFC3339 格式)到 IST 的转换。但是我找不到任何通用的时间转换方法。
Here,我找到了将 UTC 时间(RFC3339 格式)转换为 IST 的 shell 脚本,我正尝试在 C 中实现代码。
从脚本中,我找不到语句的等效方式
newdate=$(TZ=IST date -d "$formatT UTC-5:30")
在 C 代码中。
所以,我用 GMT 时间做了 -5:30
的时间差异,如下面的代码片段所示。但是,它没有按预期工作。
int main(int argc, char *argv[])
{
const char *utctime = "2019-07-24T11:47:33";
struct tm tm = {0};
char s[128] = {0};
if (NULL == (strptime(utctime, "%Y-%m-%dT%H:%M:%S", &tm))) {
printf("strptime failed\n");
}
printf("IST Time : %2d:%02d\n", ((tm.tm_hour-5)%24), tm.tm_min-30);
}
请指导我用 C 代码完成脚本执行的任务。
不可携带,linux:
struct tm time;
// fill appropriately
time_t utc = timegm(&time)
localtime_r(&utc, &time);
如果您当地的时区不是 IST,您需要在调用当地时间之前更改为:
setenv("TZ", "IST-05:30:00", 1);
// ^ not entirely sure if this is correct, please verify yourself (*)
tzset();
编辑(根据评论):(*) 特别是如果必须应用夏令时 (DST),时区字符串看起来会有所不同;您在 tzset documentation 找到有关信息。可能服务器在本地文件中提供了时区信息,那么您也可以尝试 :Asia/Kolkata
。
如果您打算之后恢复它,您可以先使用 getenv
检索当前时区,完整示例显示在 timegm
文档中。
便携方式现在是首先将时区设置为 UTC,调用 mktime
而不是 timegm
,然后将时区设置为 IST 并调用 localtime
,就像在非便携中一样版本并最终恢复本地时区(如果 intended/needed 并且您还没有通过将其设置为 IST 来完成此操作)。
我正在 C 程序中寻找 UTC(从 RFC3339 格式)到 IST 的转换。但是我找不到任何通用的时间转换方法。
Here,我找到了将 UTC 时间(RFC3339 格式)转换为 IST 的 shell 脚本,我正尝试在 C 中实现代码。
从脚本中,我找不到语句的等效方式
newdate=$(TZ=IST date -d "$formatT UTC-5:30")
在 C 代码中。
所以,我用 GMT 时间做了 -5:30
的时间差异,如下面的代码片段所示。但是,它没有按预期工作。
int main(int argc, char *argv[])
{
const char *utctime = "2019-07-24T11:47:33";
struct tm tm = {0};
char s[128] = {0};
if (NULL == (strptime(utctime, "%Y-%m-%dT%H:%M:%S", &tm))) {
printf("strptime failed\n");
}
printf("IST Time : %2d:%02d\n", ((tm.tm_hour-5)%24), tm.tm_min-30);
}
请指导我用 C 代码完成脚本执行的任务。
不可携带,linux:
struct tm time;
// fill appropriately
time_t utc = timegm(&time)
localtime_r(&utc, &time);
如果您当地的时区不是 IST,您需要在调用当地时间之前更改为:
setenv("TZ", "IST-05:30:00", 1);
// ^ not entirely sure if this is correct, please verify yourself (*)
tzset();
编辑(根据评论):(*) 特别是如果必须应用夏令时 (DST),时区字符串看起来会有所不同;您在 tzset documentation 找到有关信息。可能服务器在本地文件中提供了时区信息,那么您也可以尝试 :Asia/Kolkata
。
如果您打算之后恢复它,您可以先使用 getenv
检索当前时区,完整示例显示在 timegm
文档中。
便携方式现在是首先将时区设置为 UTC,调用 mktime
而不是 timegm
,然后将时区设置为 IST 并调用 localtime
,就像在非便携中一样版本并最终恢复本地时区(如果 intended/needed 并且您还没有通过将其设置为 IST 来完成此操作)。