首页 > 解决方案 > C++ 日期库因时区而失败

问题描述

这个以前玩过一次。我正在尝试从 C++日期库中获取一些数据,但捕获到异常。我正在编译

-DUSE_AUTOLOAD=0 -DHAS_REMOTE_API=0 -DUSE_OS_TZDB=1

代码有什么问题?

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

using namespace date;
using namespace std::chrono;

int main(int argc, char** argv) {


    try {

    auto current_time_zone = make_zoned("Europe/Athens", std::chrono::system_clock::now());

    auto current_day = date::format("%A", current_time_zone);
    auto current_time = date::format("%H:%M", current_time_zone);

    std::cout << "day: " << current_day << ", time: " << current_time << " in timezone: " << current_time_zone << std::endl;
    //std::cout << " in timezone: " << current_time_zone << std::endl;

    } catch ( std::exception& e) {
        std::cout << e.what() << std::endl;

    }

}

标签: c++datec++20

解决方案


您需要使用-pthread标志。tz.cpp用于call_once进行部分初始化。没有-pthread它是行不通的(因为它下面需要类似的东西__gthread_once)。有关更多详细信息,请参阅内容。

gdb您可以通过使用(使用)运行您的示例来验证这是否是问题所在catch throw


推荐阅读