使用 chrono::time_point 获取当前小时数和分钟数
Get current number of hours and minutes using chrono::time_point
我一直在尝试使用 std::chrono 找到一个示例,它只是获取 chrono::time_point
并将小时数和分钟数提取为整数。
我有:
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
但我不知道如何提取小时和分钟(从午夜开始)?我正在寻找类似的东西:
int hours = now.clock.hours();
问题是 标准库中确实没有任何此类功能。你必须 convert the time point to a time_t
and use the old functions to get a tm
structure.
这里有一个免费的 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
这里是时区库的视频演示:
我一直在尝试使用 std::chrono 找到一个示例,它只是获取 chrono::time_point
并将小时数和分钟数提取为整数。
我有:
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
但我不知道如何提取小时和分钟(从午夜开始)?我正在寻找类似的东西:
int hours = now.clock.hours();
问题是 标准库中确实没有任何此类功能。你必须 convert the time point to a time_t
and use the old functions to get a tm
structure.
这里有一个免费的 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
这里是时区库的视频演示: