C ++ 20'de zaman: Chrono I/O

Adanali

Active member
C ++ 20'de zaman: Chrono I/O


  1. C ++ 20'de zaman: Chrono I/O








Rainer Grimm yıllardır yazılım mimarı, ekip ve eğitim müdürü olarak çalıştı. C ++ programlama dilleri, Python ve Haskell hakkında makaleler yazmayı seviyor, ancak uzman konferanslarla konuşmayı da seviyor. Modern C ++ blogunda, C ++ tutkusuyla yoğun bir şekilde ilgileniyor.







Bu makale, Chrono'nun C ++ 20'ye uzatılmasıyla ilgili ayrıntılı yolculuğumda dokuzuncu:








üretme


Zaman süresi, takvimin zamanları ve verileri gibi çoğu veri türü, formatta bilgi olmadan doğrudan yazılabilir.

İlgisiz


Aşağıdaki tabloda standart çıkış biçimini göstermektedir. Zamanla başlayalım.








Süre

Program her seferinde değerleri gösterir.


// timeDurationsOutput.cpp

#include <chrono>&#13;
#include <iostream>&#13;
&#13;
int main() {&#13;
&#13;
std::cout << 'n';&#13;
&#13;
using namespace std::chrono_literals;&#13;
&#13;
std::cout << "5ns: " << 5ns << 'n';&#13;
std::cout << "std::chrono::nanoseconds(5): " &#13;
<< std::chrono::nanoseconds(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "5ms: " << 5ms << 'n';&#13;
std::cout << "std::chrono::microseconds(5): " &#13;
<< std::chrono::microseconds(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "5us: " << 5us << 'n';&#13;
std::cout << "std::chrono::milliseconds(5): " &#13;
<< std::chrono::milliseconds(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "5s: " << 5s << 'n';&#13;
std::cout << "std::chrono::seconds(5): " << std::chrono::seconds(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "5min: " << 5min << 'n';&#13;
std::cout << "std::chrono::minutes(5): " << std::chrono::minutes(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "5h: " << 5h << 'n';&#13;
std::cout << "std::chrono::hours(5): " << std::chrono::hours(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "std::chrono::days(5): " << std::chrono::days(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "std::chrono::weeks(5): " << std::chrono::weeks(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "std::chrono::months(5): " << std::chrono::months(5) << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::cout << "std::chrono::years(5): " << std::chrono::years(5) << 'n'; &#13;
&#13;
std::cout << 'n';&#13;
&#13;
}








Kare parantez arasındaki doğal sayılar std::chrono::weeks,, std::chrono::months VE std::chrono::years Saniye sayısına dayanın.

Kez

Statik üye işlevini kullanırsanız now C ++ 20, listede gösterilen formatta tarih ve saati alın:


year-month-day hours:minutes:seconds


Aşağıdaki program, 20:00 C ++ ile geçerli saati gösterir


// timePointsOutput.cpp&#13;
&#13;
#include <chrono>&#13;
#include <iostream>&#13;
&#13;
int main() {&#13;
&#13;
std::cout << 'n';&#13;
&#13;
auto nowSystemClock = std::chrono::system_clock::now();&#13;
std::cout << "nowSystemClock: " << nowSystemClock << 'n';&#13;
&#13;
auto nowSteadyClock = std::chrono::steady_clock::now();&#13;
// std::cout << "nowSteadyClock: " << nowSteadyClock << 'n'; ERROR&#13;
&#13;
auto nowFileClock = std::chrono::file_clock::now();&#13;
std::cout << "nowFileClock: " << nowFileClock << 'n';&#13;
&#13;
auto nowGPSClock = std::chrono::gps_clock::now();&#13;
std::cout << "nowGPSClock: " << nowGPSClock << 'n';&#13;
&#13;
// auto nowlocal_tClock = std::chrono::local_t::now(); ERROR&#13;
&#13;
auto nowTAIClock = std::chrono::tai_clock::now();&#13;
std::cout << "nowTAIClock: " << nowTAIClock << 'n';&#13;
&#13;
auto nowUTCClock = std::chrono::utc_clock::now();&#13;
std::cout << "nowUTCClock: " << nowUTCClock << 'n';&#13;
&#13;
std::cout << 'n';&#13;
&#13;
}


Program iki ilginç gerçek gösteriyor. Her şeyden önce, mevcut saat std::chrono::steady_clock::now() Görüntülenmez. İkincisi, sahte saat var std::chrono::local_t Statik üye işlevi yok now().








GPS süresi UTC döneminden 18 saniye önce. TAI süresi UTC süresinden 37 saniye ve GPS döneminden 19 saniye önce.

C ++ 17 işlevi sayesinde std::chrono::floor Farklı taneciklerde sunulabilir. Bu durumda, veri türünün zamanı std::chrono::local_time Olmak.


// timePointsOutputGranularity.cpp&#13;
&#13;
#include <chrono>&#13;
#include <iostream>&#13;
&#13;
int main() {&#13;
&#13;
std::cout << 'n';&#13;
&#13;
auto now = std::chrono::system_clock::now();&#13;
&#13;
auto zonedTime = std::chrono::zoned_time(std::chrono::current_zone(), now); &#13;
auto localTime = zonedTime.get_local_time();&#13;
&#13;
std::cout << "local_time: " &#13;
<< localTime << 'n';&#13;
&#13;
std::cout << "std::chrono::floor<std::chrono::microseconds>(localTime): " &#13;
<< std::chrono::floor<std::chrono::microseconds>(localTime) << 'n'; &#13;
&#13;
std::cout << "std::chrono::floor<std::chrono::milliseconds>(localTime): "&#13;
<< std::chrono::floor<std::chrono::milliseconds>(localTime) << 'n';&#13;
&#13;
std::cout << "std::chrono::floor<std::chrono::seconds>(localTime): "&#13;
<< std::chrono::floor<std::chrono::seconds>(localTime) << 'n';&#13;
&#13;
std::cout << "std::chrono::floor<std::chrono::minutes>(localTime): "&#13;
<< std::chrono::floor<std::chrono::minutes>(localTime) << 'n';&#13;
&#13;
std::cout << "std::chrono::floor<std::chrono::hours>(localTime): " &#13;
<< std::chrono::floor<std::chrono::hours>(localTime) << 'n';&#13;
&#13;
std::cout << "std::chrono::floor<std::chrono::days>(localTime): "&#13;
<< std::chrono::floor<std::chrono::days>(localTime) << 'n';&#13;
&#13;
std::cout << "std::chrono::floor<std::chrono::weeks>(localTime): "&#13;
<< std::chrono::floor<std::chrono::weeks>(localTime) << 'n';&#13;
&#13;
// std::cout << std::chrono::floor<std::chrono::months>(localTime) << 'n'; ERROR&#13;
// std::cout << std::chrono::floor<std::chrono::years>(localTime) << 'n'; ERROR&#13;
&#13;
std::cout << 'n';&#13;
&#13;
}


Program verir localTime Farklı hassasiyetle, zamandan başlayarak std::chrono::microseconds ve bitirmek std::chrono::weeks. Garip bir şekilde, zaman süresi std::chrono::months VE std::chrono::years Görüntülenmezler. Bu kusur C ++ 23 ile çözülmelidir.

Sırada ne var?


Bir sonraki makalemde takvim verilerinin nasıl gerçekleştirilemeyeceği de açıklanıyor.


(harita)
 
Üst