C ++ 20'de zaman: Chrono Terminolojisine Giriş
Özünde, saat diliminin (C ++ 20) işlevselliği, takvimin (C ++ 20) işlevselliğine dayanmaktadır, bu da Chono fonksiyonuna (C ++ 11) dayanmaktadır. Bu nedenle, bu temel terminoloji Chrono, üç C ++ 11 zaman bileşeni, zaman ve saat ile başlar.
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.
Chrono Temel Terminolojisi
Üç kavramı, 2011 yılında programlama dilinin babasının hayatını sunmak için kullanacağım: Dennis Ritchie. Basitlik için sadece yıllar ile ilgileniyorum.
Dennis Ritchie 70 yaşındaydı. Mesih'in doğumu dönemdir. ERA'yı zamanla birleştirdiğimde, 1941 ve 2011'de zamanları aldım.
C ++ 11'in üç saati var std::chrono::system_clock, std::chrono::steady_clock VE std::chrono::high_resolution_clock. Zamanın süresi pozitif ve negatif olabilir. Üç saatin her birinin bir üye işlevi vardır nowBu geçerli saati döndürür.
Önceki makalelerimde daha fazla zaman, zaman ve saat var:
C ++ 20, Chronob kütüphanesine yeni bileşenler ekler:
Dürüst olmak gerekirse, zaman benim için bir gizem. Bir yandan, her birimizin zamanla ilgili sezgisel bir fikri var, diğer yandan onları resmi olarak tanımlamak son derece zor. Örneğin, üç bileşen birbirine bağlıdır.
Her şeyden önce, temel veri ve gerçek tür türlerini tanıtmak istiyorum.
Temel ve gerçek türler
Tamlık için, bu bölüm temel veri türlerini ve kelimenin tam anlamıyla önceki C ++ standartlarının içerir.
Saat
Duvar saatinin yanında std::chrono::system_clockMonoton Saat std::chrono::steady_clock Ve en doğru saat std::chrono::high_resolution_clock C ++ 11'de C ++ 20 diğer beş saat biliyor. Aşağıdaki tablo tüm C ++ saatlerinin ve onların özelliklerini göstermektedir.
Saatler std::chrono::steady_clock VE std::chrono::file_clock Belirli bir uygulama dönemine sahip olun. Dönemleri std::chrono::system_clock, std::chrono::gps_clock, std::chrono::tai_clock VE std::chrono::utc_clock 00: 00: 00'dan başlayın. std::chrono::file_clock Dosya sisteminin söylentilerinin izlenmesidir.
Ayrıca, C ++ 11, std::chrono::high_resolution_clock. Bu saat tüm uygulamalarda uygulanmaz ve sadece bir takma ad std::chrono::steady_clock VEYA std::chrono::high_resolution_clock.
Bir kez saatler arasında dönüştürülebilir.
Saatler arasındaki zamanların dönüşümü
İşlev std::chrono::clock_cast Bir dönemi olan saatler arasındaki süreleri hesaplayın. Bunlar saatler std::chrono::system_clock, std::chrono::utc_clock, std::chrono::gps_clock VE std::chrono::tai_clock. Ayrıca desteklenir std::chrono::file_clock Dönüşüm.
Aşağıdaki program zamanı dönüştürmek 2021-8-5 17:00:00 Farklı saatler arasında.
// convertClocks.cpp
#include <iostream>
#include <sstream>
#include <chrono>
int main() {
std::cout << 'n';
using namespace std::literals;
std::chrono::utc_time<std::chrono::utc_clock::duration>
timePoint;
std::istringstream{"2021-8-5 17:00:00"}
>> std::chrono:
arse("%F %T"s, timePoint);
auto timePointUTC
= std::chrono::clock_cast<std::chrono::utc_clock>(timePoint);
std::cout << "UTC_time: "
<< std::format("{:%F %X %Z}", timePointUTC) << 'n';
auto timePointSys =
std::chrono::clock_cast<std::chrono::system_clock>(timePoint);
std::cout << "sys_time: "
<< std::format("{:%F %X %Z}", timePointSys) << 'n';
auto timePointFile =
std::chrono::clock_cast<std::chrono::file_clock>(timePoint);
std::cout << "file_time: "
<< std::format("{:%F %X %Z}", timePointFile) << 'n';
auto timePointGPS =
std::chrono::clock_cast<std::chrono::gps_clock>(timePoint);
std::cout << "GPS_time: "
<< std::format("{:%F %X %Z}", timePointGPS) << 'n';
auto timePointTAI =
std::chrono::clock_cast<std::chrono::tai_clock>(timePoint);
std::cout << "TAI_time: "
<< std::format("{:%F %X %Z}", timePointTAI) << 'n';
std::cout << 'n';
}
İşlev std::chrono:
arse Chrono nesnesini akıştan alın. Aşağıdaki satırlarda yürüyün std::chrono::clock_cast . timePoint belirtilen saate. Zaman aşağıdaki satırda görüntülenir, bu nedenle tarih (%F), yerel saatin temsili (%X) ve saat diliminin kısaltması (%Z). Bir sonraki makalemden biri format dizesinde daha derinlemesine gidecek.
Çıktı bazılarını şaşırtacak: GPS süresi UTC zamanından 18 saniye önce. TAI süresi UTC süresinden 37 saniye ve GPS döneminden 19 saniye önce.
Sırada ne var?
Bir sonraki makalemde, zaman ve zamanla veri türleri üzerinden yolculuğuma devam edeceğim.
(RME)
C ++ 20'de zaman: Chrono Terminolojisine Giriş
Özünde, saat diliminin (C ++ 20) işlevselliği, takvimin (C ++ 20) işlevselliğine dayanmaktadır, bu da Chono fonksiyonuna (C ++ 11) dayanmaktadır. Bu nedenle, bu temel terminoloji Chrono, üç C ++ 11 zaman bileşeni, zaman ve saat ile başlar.

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.

Chrono Temel Terminolojisi
- A zaman Başlangıç noktası var, söz konusu ve dönemden daha fazla zaman deniyordu.
- A Süre Fark iki kez. Saatin kene sayısı zamanın süresini tanımlar.
- A Saat Mevcut saati hesaplamak için bir başlangıç noktası (ERA) ve bir onay işareti vardır.
Üç kavramı, 2011 yılında programlama dilinin babasının hayatını sunmak için kullanacağım: Dennis Ritchie. Basitlik için sadece yıllar ile ilgileniyorum.

Dennis Ritchie 70 yaşındaydı. Mesih'in doğumu dönemdir. ERA'yı zamanla birleştirdiğimde, 1941 ve 2011'de zamanları aldım.
C ++ 11'in üç saati var std::chrono::system_clock, std::chrono::steady_clock VE std::chrono::high_resolution_clock. Zamanın süresi pozitif ve negatif olabilir. Üç saatin her birinin bir üye işlevi vardır nowBu geçerli saati döndürür.
Önceki makalelerimde daha fazla zaman, zaman ve saat var:
C ++ 20, Chronob kütüphanesine yeni bileşenler ekler:
- . Günün zamanı Hava saatler, dakikalar, saniye ve saniye kesirlerine ayrılmıştır.
- takvim Yıl, ay, hafta içi veya bir haftanın N-Ten günü gibi çeşitli takvim verileri anlamına gelir.
- A Jet lag Belirli bir coğrafi alanda belirli bir zamandır.
- A Zonlu Zaman Bir zamanlar bir zaman dilimi ile.
Dürüst olmak gerekirse, zaman benim için bir gizem. Bir yandan, her birimizin zamanla ilgili sezgisel bir fikri var, diğer yandan onları resmi olarak tanımlamak son derece zor. Örneğin, üç bileşen birbirine bağlıdır.
Her şeyden önce, temel veri ve gerçek tür türlerini tanıtmak istiyorum.
Temel ve gerçek türler
Tamlık için, bu bölüm temel veri türlerini ve kelimenin tam anlamıyla önceki C ++ standartlarının içerir.
Saat
Duvar saatinin yanında std::chrono::system_clockMonoton Saat std::chrono::steady_clock Ve en doğru saat std::chrono::high_resolution_clock C ++ 11'de C ++ 20 diğer beş saat biliyor. Aşağıdaki tablo tüm C ++ saatlerinin ve onların özelliklerini göstermektedir.

Saatler std::chrono::steady_clock VE std::chrono::file_clock Belirli bir uygulama dönemine sahip olun. Dönemleri std::chrono::system_clock, std::chrono::gps_clock, std::chrono::tai_clock VE std::chrono::utc_clock 00: 00: 00'dan başlayın. std::chrono::file_clock Dosya sisteminin söylentilerinin izlenmesidir.
Ayrıca, C ++ 11, std::chrono::high_resolution_clock. Bu saat tüm uygulamalarda uygulanmaz ve sadece bir takma ad std::chrono::steady_clock VEYA std::chrono::high_resolution_clock.
Bir kez saatler arasında dönüştürülebilir.
Saatler arasındaki zamanların dönüşümü
İşlev std::chrono::clock_cast Bir dönemi olan saatler arasındaki süreleri hesaplayın. Bunlar saatler std::chrono::system_clock, std::chrono::utc_clock, std::chrono::gps_clock VE std::chrono::tai_clock. Ayrıca desteklenir std::chrono::file_clock Dönüşüm.
Aşağıdaki program zamanı dönüştürmek 2021-8-5 17:00:00 Farklı saatler arasında.
// convertClocks.cpp
#include <iostream>
#include <sstream>
#include <chrono>
int main() {
std::cout << 'n';
using namespace std::literals;
std::chrono::utc_time<std::chrono::utc_clock::duration>
timePoint;
std::istringstream{"2021-8-5 17:00:00"}
>> std::chrono:
auto timePointUTC
= std::chrono::clock_cast<std::chrono::utc_clock>(timePoint);
std::cout << "UTC_time: "
<< std::format("{:%F %X %Z}", timePointUTC) << 'n';
auto timePointSys =
std::chrono::clock_cast<std::chrono::system_clock>(timePoint);
std::cout << "sys_time: "
<< std::format("{:%F %X %Z}", timePointSys) << 'n';
auto timePointFile =
std::chrono::clock_cast<std::chrono::file_clock>(timePoint);
std::cout << "file_time: "
<< std::format("{:%F %X %Z}", timePointFile) << 'n';
auto timePointGPS =
std::chrono::clock_cast<std::chrono::gps_clock>(timePoint);
std::cout << "GPS_time: "
<< std::format("{:%F %X %Z}", timePointGPS) << 'n';
auto timePointTAI =
std::chrono::clock_cast<std::chrono::tai_clock>(timePoint);
std::cout << "TAI_time: "
<< std::format("{:%F %X %Z}", timePointTAI) << 'n';
std::cout << 'n';
}
İşlev std::chrono:

Çıktı bazılarını şaşırtacak: GPS süresi UTC zamanından 18 saniye önce. TAI süresi UTC süresinden 37 saniye ve GPS döneminden 19 saniye önce.
Sırada ne var?
Bir sonraki makalemde, zaman ve zamanla veri türleri üzerinden yolculuğuma devam edeceğim.
(RME)