c - 将 Unix time_t 转换为任意时区/从任意时区转换的最佳方法?

标签 c linux gcc timezone time-t

我的代码从外部源接收 time_t。然而,那个 time_t 并不是完全基于 UTC 纪元时间,我得到一个时区字符串(例如,EDT、PST 等),并且它基于这个偏移的纪元。我需要将其转换为真正的基于 UTC 纪元的 time_t。

此外,我需要能够朝相反的方向前进,采用基于 UTC 纪元的 time_t 和时区,并创建偏移的 time_t,但在这种情况下,而不是像 EDT/PST 这样的时区,等等,我有一个 Unix 风格的时区描述,如“美国/纽约”,需要转换为给定夏令时的正确时区,所以我需要从算法中返回,包括偏移的 time_t 和正确的描述符(EDT,美国东部时间)。

我很确定我可以通过临时更改 tzset() 以及故障时间、time_t 和 timeval 之间的某种转换组合来实现这一点,但这样做总是让我的大脑受伤,让我觉得自己缺少明显的东西。谁能推荐一些代码或 sudo 代码来执行此操作或至少推荐一种正确的方法?

最佳答案

time_t 以秒为单位,因此只需将您的 time_t 值偏移时区偏移小时数的 3600 倍。只要您有明确标识的偏移量(即 EST 或 EDT 而不是 US/Eastern 或 EST5EDT 或诸如此类的东西),那么这就非常简单并且不容易出错。

关于c - 将 Unix time_t 转换为任意时区/从任意时区转换的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3329488/

相关文章:

c - C中函数中的typedef struct和struct之间的区别

c - 用C为linux写一个shell,某个进程的exec是无限循环的

javascript - Bash 和 mongodb 脚本评估变量

linux - 将十六进制地址直接分配给 LKM 代码中的指针但得到不同的结果

c++ - 如何使 AddressSanitizer 不检查第三方库

c - 为什么字节是颠倒的?

c - 带有代码块的段错误 11

c - 复制二进制文件时何时使用 int 与 char 作为缓冲区?

c++ - 如何为库PCRE2生成单个 header ?

c++ - Erlang/OTP ./configure 失败打开 Solaris