C++20'de Zaman: Krono G/Ç

Adanali

Active member
C++20'de Zaman: Krono G/Ç


  1. C++20'de Zaman: Krono G/Ç

Duyuru








Rainer Grimm uzun yıllardır yazılım mimarı, ekip ve eğitim yöneticisi olarak çalışmaktadır. C++, Python ve Haskell programlama dilleri üzerine makaleler yazmaktan hoşlanıyor, aynı zamanda özel konferanslarda sık sık konuşmaktan da hoşlanıyor. Modern C++ adlı blogunda C++ tutkusunu yoğun bir şekilde ele alıyor.







Bu makale, C++20'deki Chrono uzantısıyla ilgili ayrıntılı yolculuğumun dokuzuncusu:








üretme


Zaman süreleri, zaman noktaları ve takvim tarihleri gibi çoğu veri türü, format belirtilmeden doğrudan yazılabilir.

Biçimlendirilmemiş


Aşağıdaki tabloda standart çıktı formatı gösterilmektedir. Zaman süreleriyle başlayalım.








Süreler

Program her zaman aralığı için değerleri görüntüler.


// 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;
}








Köşeli parantez içindeki doğal sayılar std::chrono::weeks, std::chrono::months VE std::chrono::years saniye sayısını temsil eder.

zaman içindeki noktalar

Statik üye işlevini kullanma now C++20 saatlerinin tarih ve saatini listede gösterilen biçimde alırsınız:


year-month-day hours:minutes:seconds


Aşağıdaki program tüm C++20 saatlerini kullanarak geçerli saati sağlar.


// 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çeği gösteriyor. İlk olarak, şimdiki zaman şu şekilde belirlenebilir: std::chrono::steady_clock::now() verildiğinde görüntülenmez. İkincisi, sözde saat std::chrono::local_t statik üye işlevi yok now().








GPS zamanı UTC saatinden 18 saniye ileridedir. TAI zamanı UTC saatinden 37 saniye, GPS saatinden 19 saniye ileridedir.

C++17 işlevselliği sayesinde std::chrono::floor zaman farklı ayrıntı düzeylerinde temsil edilebilir. Bu durumda saat veri tipinde olmalıdır 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 zamansal süreden başlayarak farklı hassasiyetlerle std::chrono::microseconds ve ile biter std::chrono::weeks. Garip bir şekilde, bunun için gereken süreler std::chrono::months VE std::chrono::years görüntülenmez. Bu eksiklik C++23 ile giderilmelidir.

Sıradaki ne?


Bir sonraki makalemde takvim verilerinin biçimlendirme olmadan bile nasıl görüntülenebileceği anlatılıyor.


(harita)



Haberin Sonu
 
Üst