gpt4 book ai didi

c++ - 以线程安全的方式在C/C++中从时区名称字符串转换时区偏移

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

我正在尝试实现一个可以转换给定时区名称字符串的功能,它可以:

  • 接受输入的时区字符串,例如“Australia / Melbourne”;
  • 检查主机操作系统(假设它是POSIX环境)时区数据库;
  • 返回以秒为单位的时区偏移量的整数(对于DST中的Melbourne,为36000)。

  • 可以通过调用 putenv("TZ=Australia/Melbourne")来完成,但这是 may not be thread-safe

    有没有办法不用 putenv()或以某种方式使其成为线程安全的方法吗?提前致谢!

    最佳答案

    由于编译器尚不支持C++ 20 std::chrono库的所有功能,因此我将编写一个使用Howard Hinnant的date https://github.com/HowardHinnant/date库的解决方案。 C++ 20引入了 std::chrono::zoned_time ,您可以使用它来实现所需的功能。

    #include "date/tz.h"
    #include <iostream>

    int main()
    {
    auto current_time = std::chrono::system_clock::now();
    auto la = date::zoned_time{"America/Los_Angeles", current_time};
    auto sy = date::zoned_time{"Australia/Sydney", current_time};
    std::cout << date::format("%T\n", sy.get_local_time() - la.get_local_time());
    }

    上面的示例将为您提供两个时区之间的时差。此外,如果您想获取当前操作系统的时区,可以使用将来希望编译器支持的功能- std::chrono::time_zone::name

    关于c++ - 以线程安全的方式在C/C++中从时区名称字符串转换时区偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60015754/

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