【发布时间】:2019-12-03 07:54:02
【问题描述】:
我正在寻找 C 程序中的 UTC(从 RFC3339 格式)到 IST 的转换。但是我找不到任何通用的方法来转换时间。
Here,我找到了将 UTC 时间(RFC3339 格式)转换为 IST 的 shell 脚本,我正在尝试用 C 代码实现。
从脚本中,我找不到语句的等效方式
C 代码中的newdate=$(TZ=IST date -d "$formatT UTC-5:30")。
所以,我用 GMT 时间做了-5:30 的时间差异,如下面的 sn-p 所示。但是,它没有按预期工作。
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 代码完成脚本所做的任务。
【问题讨论】:
-
在
struct tm上进行时间/日期运算很麻烦。您真的要处理时、分、秒、日、月和年变化的所有界限,包括闰年和闰秒吗?不你不是!使用mktime将值转换为time_t并在那里进行算术运算。请注意,这仍然很棘手,因为您需要确定 DST 在目标时区是否有效。它仍然有点毛茸茸,但我记得几年前想出一个巧妙的技巧。不太记得我最后做了什么。 -
如果 IST 是您的本地时间,您可以先转换为 time_t(如@paddy 的评论),然后使用
localtimefunction 直接转换回来。如果不是,您可以先使用tzsetfunction 调整时区。 -
等一下,
mktime假设为local time!所以你需要先将UTC设置为当地时间!和 linux 一样,更好:timegm.
标签: c linux datetime time ctime