2015-12-30 14 views
5

Ho cercato di trovare un esempio utilizzando std :: chrono che ottiene semplicemente un chrono::time_point ed estrae il numero di ore e il numero di minuti come numeri interi.Ottieni il numero corrente di ore e minuti utilizzando chrono :: time_point

ho:

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

ma non riesco a trovare il modo di poi estrarre le ore ei minuti (da mezzanotte)? Sto cercando qualcosa di simile:

int hours = now.clock.hours(); 

risposta

6

Ecco un numero gratuito, open-source date library che lo farà per voi. Sentiti libero di ispezionare il codice se vuoi sapere esattamente come è fatto. È possibile utilizzare per ottenere le ore attuali e minuti dalla mezzanotte nel fuso orario UTC in questo modo:

#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'; 
} 

Se si desidera che le informazioni in qualche altro fuso orario, avrete bisogno di questo ulteriore IANA time zone parser (o si può scrivere il proprio sistema di gestione del fuso orario). Il codice di cui sopra verrebbe modificato in questo modo per ottenere le ore ei minuti dalla mezzanotte nel fuso orario locale:

#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'; 
} 

Queste librerie sono disponibili su GitHub qui:

https://github.com/HowardHinnant/date

Ecco un video di presentazione della biblioteca data:

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

E qui è un video Presentati sulla della biblioteca di fuso orario:

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

Problemi correlati