【问题标题】:Get current number of hours and minutes using chrono::time_point使用 chrono::time_point 获取当前小时数和分钟数
【发布时间】:2015-12-30 10:54:29
【问题描述】:

我一直在尝试使用 std::chrono 找到一个示例,该示例仅获取 chrono::time_point 并将小时数和分钟数提取为整数。

我有:

std::chrono::system_clock::time_point now = std::chrono::system_clock::now();

但我不知道如何提取小时和分钟(从午夜开始)?我正在寻找类似的东西:

int hours = now.clock.hours();

【问题讨论】:

标签: c++ c++11 chrono


【解决方案1】:

这是一个免费的open-source date library,它将为您完成这项工作。如果您想确切地知道它是如何完成的,请随意检查代码。您可以使用它来获取自 UTC 时区午夜以来的当前小时和分钟,如下所示:

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

int
main()
{
    auto now = date::floor<std::chrono::minutes>(std::chrono::system_clock::now());
    auto dp = date::floor<date::days>(now);
    auto time = date::make_time(now - dp);
    int hours = time.hours().count();
    int minutes = time.minutes().count();
    std::cout.fill('0');
    std::cout << std::setw(2) << hours << ':' << std::setw(2) << minutes << '\n';
}

如果您想要其他时区的信息,您将需要这个额外的IANA time zone parser(或者您可以编写自己的时区管理系统)。上面的代码将被修改为获取本地时区自午夜以来的小时和分钟:

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

int
main()
{
    auto zt = date::make_zoned(date::current_zone(),
                               std::chrono::system_clock::now());
    auto now = date::floor<std::chrono::minutes>(zt.get_local_time());
    auto dp = date::floor<date::days>(now);
    auto time = date::make_time(now - dp);
    int hours = time.hours().count();
    int minutes = time.minutes().count();
    std::cout.fill('0');
    std::cout << std::setw(2) << hours << ':' << std::setw(2) << minutes << '\n';
}

这些库可以在 github 上找到:

https://github.com/HowardHinnant/date

这是日期库的视频演示:

https://www.youtube.com/watch?v=tzyGjOm8AKo

这是时区库的视频演示:

https://www.youtube.com/watch?v=Vwd3pduVGKY

【讨论】:

    【解决方案2】:

    问题在于标准库中没有真正的任何此类功能。你必须convert the time point to a time_t 并使用old functions 来获取a tm structure

    【讨论】:

    • 像这样的东西真的让我很恼火——不过谢谢。
    猜你喜欢
    • 2023-04-07
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    相关资源
    最近更新 更多