2015-12-30 57 views
5

我一直在試圖找到一個使用std :: chrono的例子,它只是獲取chrono::time_point並提取整數的小時數和分鐘數。使用chrono :: time_point獲取當前的小時數和分鐘數

我:

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

,但我不能找出如何再提取小時和分鐘(從午夜開始)?我在尋找的東西,如:

int hours = now.clock.hours(); 

回答

6

這是一個免費的,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

相關問題