gpt4 book ai didi

c - 为什么 mktime 取消设置 gmtoff ?如何让 mktime 使用 gmtoff 字段?

转载 作者:行者123 更新时间:2023-12-02 03:28:19 25 4
gpt4 key购买 nike

我想从 string 得到一个 unix 时间戳包含形式 YYYYMMDDThhmmss+TZ 的时间表示.

为此,我将字符串转换为 struct tm然后使用 mktime将其转换为unix时间戳。

str = "20150228T202832+02";
struct tm time_struct = {0};
strptime(str,"%Y%m%dT%H%M%S%z", &time_struct);
uint64_t timestamp = mktime(&time_struct); /* ignore and unset TZ */

当我使用的时区与我所在的时区不同时,就会出现问题。 mktime函数忽略并取消设置 tm_gmtoff领域 struct tm ,返回错误的时间戳(差异由 string 的时区减去我的时区给出)。
  • 为什么是 mktime忽略 tm_gmtoff领域struct tm ?
  • 为什么是 mktime设置 tm_gmtoff字段到我当前的时区而不相应地修改 struct tm 的其余部分? (让 struct tm 代表不同的时间!)

  • 为了纠正这种行为,我想添加我的时区和 string 的时区之间的差异。到 struct tm 的字段, 在调用 mktime 之前.
  • 如何在不创建新(无用)的情况下获得当前时区 struct tm ?
  • 最佳答案

    这是一个响应我的问题的代码片段。诀窍是使用全局变量 timezone .

    /*
    Function: timestamp_from_datetime
    Returns the timestamp corresponding to a formated string YYYYMMDDTHHMMSS+TZ

    Parameters:
    datetime - must be non-NULL

    Returns:
    The timestamp associated to datetime
    */
    time_t timestamp_from_datetime(const char *datetime)
    {
    struct tm time_struct = (struct tm) {0};
    strptime(datetime,"%Y%m%dT%H%M%S%z", &time_struct);
    long int gmtoff = time_struct.tm_gmtoff;
    return mktime(&time_struct) - gmtoff - timezone;
    }

    关于c - 为什么 mktime 取消设置 gmtoff ?如何让 mktime 使用 gmtoff 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28991427/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com