C++ C++;日期库因时区而失败

C++ C++;日期库因时区而失败,c++,date,c++20,C++,Date,C++20,这个曾经玩过一次。我试图从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**

这个曾经玩过一次。我试图从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;

    }

}
#包括
#包括“日期/tz.h”
#包括
使用名称空间日期;
使用名称空间std::chrono;
int main(int argc,字符**argv){
试一试{
自动当前时区=进行分区(“欧洲/雅典”,std::chrono::system\u clock::now());
自动当前日期=日期::格式(“%A”,当前时区);
自动当前时间=日期::格式(“%H:%M”,当前时区);

std::cout我不确定问题是什么,但我可以告诉您,这不会引发包含消息“未知错误”的异常


尝试将
-DONLY\u C\u LOCALE=1
添加到构建标志中。这将避免std::lib的
time\u put
方面,但将您限制为仅使用“C”区域设置。如果这解决了问题,那么引发异常的是std::lib的
std::time\u put
方面。

您需要使用
-pthread
标志。
tz.cpp
使用
调用一次
来执行部分初始化。如果没有
-pthread
,它将无法工作(因为在下面它需要像
\uu gthread\u一样的东西一次
)。有关更多详细信息,请参阅


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

我刚刚添加了标记c++20,提出了这个问题。OP引用的库是c++20草案规范的一个示例实现。
中的消息是什么。
?@SamVarshavchik:“我很好奇“日期库”是否“相当流行”的证据是什么。”“我不知道它是否真的“相当流行”,但我认为它被选为C++20的标准库将提高它的受欢迎程度;)对于那些跟上C++发展的人来说,这是众所周知的。尽管OP没有充分弄清楚他在谈论那些从未听说过的人。1@cateof:我不确定问题出在哪里,但我可以告诉您,我的库不会引发包含消息“未知错误”的异常“。尝试将
-DONLY\u C\u LOCALE=1
添加到生成标志中。这将避免std::lib的
time\u put
方面,但将您限制为仅使用“C”地区。如果这解决了问题,则引发异常的是std::lib的
std::time\u put
方面。