這是一個免費的,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
這裏是一個視頻presentati上的時區庫:
https://www.youtube.com/watch?v=Vwd3pduVGKY
它這樣的東西這着實惹惱了我 - 雖然感謝。 – user997112