在C/C++中,在本地时间和UTC之间转换日期时间的最佳方法是什么?
"datetime"是指包含日期和时间的一些时间表示.我会很乐意用time_t,struct tm或任何其他的表示,使之成为可能.
我的平台是Linux.
这是我正在尝试解决的具体问题:我得到一对包含朱利安日期和一天中的秒数的值.这些值是格林威治标准时间.我需要将其转换为本地时区"YYYYMMDDHHMMSS"值.我知道如何将朱利安日期转换为YMD,显然很容易将秒转换为HHMMSS.然而,棘手的部分是时区转换.我相信我能找到解决方案,但我宁愿找到一种"标准"或"众所周知"的方式,而不是磕磕绊绊.
可能相关的问题是在C中获取时区的夏令时转换日期
我有一个包含本地日期/时间的字符串,我需要将其转换为time_t值(UTC) - 我一直在尝试这个:
char* date = "2009/09/01/00";
struct tm cal = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL};
strptime(date, "%Y/%m/%d/%H", &cal);
time_t t = mktime(&cal);
Run Code Online (Sandbox Code Playgroud)
但是我得到的time_t值是如果字符串被解析为UTC而不是本地时间的话我期望的值.也许我误解了strptime应该做什么,但是在我9月1日的时区(英国),我们正在使用BST(即UTC + 1小时)所以我希望我最终得到的值比UTC提前1小时.
有没有办法将字符串解释为localtime,自动考虑在该日期生效的UTC偏移量?请注意,我需要time_t值而不是struct tm,在上面的示例中我希望time_t值对应于2009-09-01 01:00:00 GMT
我必须实例化一个自定义库类的对象,该类需要nanoseconds since 'epoch' in UTC time构造:
class utc_time
{
public:
utc_time(TYPE nanoseconds_since_epoch):
_nanoseconds_since_epoch(nanoseconds_since_epoch){}
private:
TYPE _nanoseconds_since_epoch;
};
Run Code Online (Sandbox Code Playgroud)
我的输入是什么nanoseconds since 'midnight' in UTC time.当然,我需要获得epoch直到最后midnight纳秒(以UTC为单位)将其添加到我的输入并将其提供给我的类构造函数.我知道我们有gtime可能会有所帮助,但我不知道如何提取所需的信息.
我很感激你的线索