如何在不查看时间的情况下获取时区?

编程语言 2026-07-12

不论是在计算机领域还是其他方面,时区取决于你所在的位置,而不是当前时间(忽略夏令时以及历史调整时区边界的因素)。在计算机系统中,时区是你设定的一个固定设置;例如,在许多(大多数?)Linux系统上,我们会有一个像这样的符号链接:/etc/localtime -> /usr/share/zoneinfo/Asia/Gaza,以及在其他操作系统上类似的机制。

现在,我想在C++中以编程方式、可移植地获取该时区。我注意到关于获取时区或UTC差值的旧问题,例如:

但那里给出的解决方案似乎是基于获取当前时间,而我想这么做,事实上在我看来这似乎是错误的做法。那么,我能否在不获取时间的前提下,在C++中实现这一点,做到跨平台/通用?

备注:

  • 对于C++标准版本没有硬性要求,但若能在较早的标准下给出解答就越好。
  • 如果可能,请尽量使用 std::chrono

解决方案

答案非常简单直接——前提是你能够使用C++20及以上版本: std::chrono::current_zone() 返回你系统时区的指针。

注:

  • 多谢 @RichardCritten指出这一点。我本来没想到 std::chrono 也有这个功能——那是因为我没有跟进该标准在新版本中的新增内容。 std::chrono 自C++11就存在,但在C++20时获得了大量功能。
  • 如果你使用的是C++17或更早版本,那么情况就比较棘手。@HowardHinnant表示,在这种情况下获取当前时区“真的很难”。
  • 如果标准库无法访问相应的 时区数据库,该函数将抛出一个 std::runtime_error 异常。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章