【发布时间】:2011-03-20 18:13:17
【问题描述】:
我的代码从外部源接收 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-code 来执行此操作或至少是正确的方法吗?
【问题讨论】:
-
任何语言中的时间操纵都没有明显或适当(或清楚或快乐)的地方。 tzset() 和 localtime()/strftime() 是最好的,imo。
标签: c linux gcc timezone time-t