C ++ 20'de zaman: Günün saati ve takvimin tarihi için yeni veri türleri
Günün zamanı
Chrono'nun işlevselliği için temel veri türlerine ilişkin makalelere göre, C ++ 20'de yeni bir veri türü ile ilgileniyorum.
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.
std::chrono::hh_mm_ss Gece yarısından sürüldü, saatler, dakikalar, saniye ve saniyelerin kesirlerine ayrıldı. Bu tür veriler genellikle bir biçimlendirme aracı olarak kullanılır. Aşağıdaki tablo, std::chrono::hh_mm_sS- tOfDay.
Kullanılan döneme bağlı olarak, statik üye muhabiri sağlar tOfDay.fractional_width. Eğer değeri yoksa fractional_width bölgede [0, 18]var, fractional_width 6. Örneğin bkz. std::chrono::duration<int, std::ratio<1, 3>> Aşağıdaki tabloda.
Veri türünün kullanımı std::chrono::hh_mm_ss Çok basit.
// timeOfDay.cpp
#include <chrono>
#include <iostream>
int main() {
using namespace std::chrono_literals;
std::cout << std::boolalpha << 'n';
auto timeOfDay =
std::chrono::hh_mm_ss(10.5h + 98min + 2020s + 0.5s); // (1)
std::cout<< "timeOfDay: " << timeOfDay << 'n'; // (2)
std::cout << 'n';
std::cout << "timeOfDay.hours(): "
<< timeOfDay.hours() << 'n'; // (4)
std::cout << "timeOfDay.minutes(): "
<< timeOfDay.minutes() << 'n'; // (4)
std::cout << "timeOfDay.seconds(): "
<< timeOfDay.seconds() << 'n'; // (4)
std::cout << "timeOfDay.subseconds(): "
<< timeOfDay.subseconds() << 'n'; // (4)
std::cout << "timeOfDay.to_duration(): "
<< timeOfDay.to_duration() << 'n'; // (5)
std::cout << 'n';
std::cout << "std::chrono::hh_mm_ss(45700.5s): "
<< std::chrono::hh_mm_ss(45700.5s) << 'n'; // (6)
std::cout << 'n';
std::cout << "std::chrono::is_am(5h): "
<< std::chrono::is_am(5h) << 'n'; // (7)
std::cout << "std::chrono::is_am(15h): "
<< std::chrono::is_am(15h) << 'n'; // (7)
std::cout << 'n';
std::cout << "std::chrono::make12(5h): "
<< std::chrono::make12(5h) << 'n'; // (7)
std::cout << "std::chrono::make12(15h): "
<< std::chrono::make12(15h) << 'n'; // (7)
}
(1) 'de yeni bir örnek oluşturuyorum std::chrono::hh_mm_ss: timeOfDay. C ++ 14'ten kronoral krono sayesinde, günün bir nesnesini başlatmak için biraz zaman ekleyebilirim. C ++ 20 ile yapabilirsin timeOfDay Doğrudan harcayın (2). Gerisi okumak kolay olmalı. (4) Zamanın bileşenleri saatler, dakika, saniye ve saniye olarak harcanmıştır. (5) Zamanın süresi birkaç saniye içinde gece yarısına döndü. (6) Daha ilginçtir: Bildirilen saniye (2) 'de gösterilen zamana karşılık gelir. (7) Belirtilen sürenin sabah olması durumunda geri döner. (8) Son olarak, belirtilen saatin 12 saat eşdeğerini döndürür.
İşte programın baskısı:
Takvim tarihi
C ++ 20'de yeni bir Chrono uzantısı verisi türü bir takvim tarihidir. C ++ 20, bir takvim tarihi oluşturmanın ve onunla etkileşime girmenin çeşitli yollarını destekler. Her şeyden önce: Takvim tarihi için ne beklerim?
Sayesinde Güzel Sözdizimi yapabilirsiniz std::chrono:
perator / Gregoryen takviminden veri oluşturmak için kullanın.
Takvimler için veri türleri çeşitli işlemleri destekler. Aşağıdaki tablo genel bir bakış sunmaktadır. Okunabilirlik nedenlerinden dolayı, bazen adın adını görmezden geliyorum std::chrono.
Operasyonları artırma ve azaltma ++/-- Önek ve Postfix sürümünde desteklenirler. Ekleme veya Çıkarma +/- veri türü nesneleri gerektirir std::chrono::duration. Yani, veri türünün iki nesnesi arasındaki farkınız varsa std::chrono::day formlar, türden bir nesne alın std::chrono::days. <=> Yeni üç yollu karşılaştırma operatörüdür.
Aşağıdaki program takvim türleri için işlemler kullanır:
// calendarOperations.cpp
#include <chrono>
#include <iostream>
int main() {
std::cout << 'n';
using std::chrono::Monday;
using std::chrono::Saturday;
using std::chrono::March;
using std::chrono::June;
using std::chrono::July;
using std::chrono::days;
using std::chrono::months;
using std::chrono::years;
using std::chrono::last;
using namespace std::chrono_literals;
std::cout << std::boolalpha;
std::cout << "March: " << March << 'n';
std::cout << "March + months(3): "
<< March + months(3) << 'n'; // (1)
std::cout << "March - months(25): "
<< March - months(25) << 'n'; // (5)
std::cout << "July - June: " << July - June
<< 'n'; // (6)
std::cout << "June < July: " << (June < July) << 'n'; // (7)
std::cout << 'n';
std::cout << "Saturday: " << Saturday << 'n';
std::cout << "Saturday + days(3): "
<< Saturday + days(3) << 'n'; // (2)
std::cout << "Saturday - days(22): "
<< Saturday - days(22) << 'n'; // (8)
std::cout << "Saturday - Monday: "
<< Saturday - Monday << 'n'; // (9)
std::cout << 'n';
std::cout << "2021y/March: " << 2021y/March << 'n'; // (3)
std::cout << "2021y/March + years(3) - months(35): " // (10)
<< 2021y/March + years(3) - months(35) << 'n';
std::cout << "2022y/July - 2021y/June: "
<< 2022y/July - 2021y/June << 'n'; // (11)
std::cout << "2021y/June > 2021y/July: "
<< (2021y/June > 2021y/July) << 'n'; // (12)
std::cout << 'n';
std::cout << "2021y/March/Saturday[last]: "
<< 2021y/March/Saturday[last] << 'n'; // (4)
std::cout << "2021y/March/Saturday[last] + months(13) " +
"+ years(3): "
<< 2021y/March/Saturday[last] +
months(13) + years(3) << 'n';
std::cout << "2021y/July/Saturday[last] - months(1) == " +
" 2021y/June/Saturday[last]: "
<< (2021y/July/Saturday[last] - months(1) ==
2021y/June/Saturday[last])
<< 'n';
std::cout << 'n';
}
Program işlemleri listeler std::chrono::month (1), std::chrono::weekday (2), std::chrono::year_month (3) e std::chrono::year_month_weekday_last (4).
Zamanın süresini eklerken veya çıkarırken std::chrono::months Modül işlemleri otomatik olarak kullanılır (5 ve 6). İki kişinin çıkarılması std::chrono::month-Plets 1 aya dönüşür. Bir ayı var 2629746 Saniye (7). Sonuç olarak, bir zaman geçirebilirsiniz std::chrono::days Takvim verilerine std::chrono::day Onlardan ekleyin veya kaldırıldı (8 ve 9). İki kişinin çıkarılması std::chrono::day-Borlar tercüme edilir std::chrono::days-Nesne. std::chrono::year_month Çıkarmayı (10), fark (11) ve zamanların (12) karşılaştırmasını etkinleştirin. Nesneler yazın std::chrono::weekday_last Zamanın eklenmesini/çıkarılmasını etkinleştirin std::chrono::months VE std::chrono::years. Dahası, yapabilirler std::chrono::weekday_last-Nesneler karşılaştırılır.
Sırada ne var?
C ++ 20, veri türlerinin kullanımını daha uygun hale getirmek için sabit ve gerçek anlamlı destekler.
(RME)
C ++ 20'de zaman: Günün saati ve takvimin tarihi için yeni veri türleri
Günün zamanı
Chrono'nun işlevselliği için temel veri türlerine ilişkin makalelere göre, C ++ 20'de yeni bir veri türü ile ilgileniyorum.

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.

std::chrono::hh_mm_ss Gece yarısından sürüldü, saatler, dakikalar, saniye ve saniyelerin kesirlerine ayrıldı. Bu tür veriler genellikle bir biçimlendirme aracı olarak kullanılır. Aşağıdaki tablo, std::chrono::hh_mm_sS- tOfDay.

Kullanılan döneme bağlı olarak, statik üye muhabiri sağlar tOfDay.fractional_width. Eğer değeri yoksa fractional_width bölgede [0, 18]var, fractional_width 6. Örneğin bkz. std::chrono::duration<int, std::ratio<1, 3>> Aşağıdaki tabloda.

Veri türünün kullanımı std::chrono::hh_mm_ss Çok basit.
// timeOfDay.cpp
#include <chrono>
#include <iostream>
int main() {
using namespace std::chrono_literals;
std::cout << std::boolalpha << 'n';
auto timeOfDay =
std::chrono::hh_mm_ss(10.5h + 98min + 2020s + 0.5s); // (1)
std::cout<< "timeOfDay: " << timeOfDay << 'n'; // (2)
std::cout << 'n';
std::cout << "timeOfDay.hours(): "
<< timeOfDay.hours() << 'n'; // (4)
std::cout << "timeOfDay.minutes(): "
<< timeOfDay.minutes() << 'n'; // (4)
std::cout << "timeOfDay.seconds(): "
<< timeOfDay.seconds() << 'n'; // (4)
std::cout << "timeOfDay.subseconds(): "
<< timeOfDay.subseconds() << 'n'; // (4)
std::cout << "timeOfDay.to_duration(): "
<< timeOfDay.to_duration() << 'n'; // (5)
std::cout << 'n';
std::cout << "std::chrono::hh_mm_ss(45700.5s): "
<< std::chrono::hh_mm_ss(45700.5s) << 'n'; // (6)
std::cout << 'n';
std::cout << "std::chrono::is_am(5h): "
<< std::chrono::is_am(5h) << 'n'; // (7)
std::cout << "std::chrono::is_am(15h): "
<< std::chrono::is_am(15h) << 'n'; // (7)
std::cout << 'n';
std::cout << "std::chrono::make12(5h): "
<< std::chrono::make12(5h) << 'n'; // (7)
std::cout << "std::chrono::make12(15h): "
<< std::chrono::make12(15h) << 'n'; // (7)
}
(1) 'de yeni bir örnek oluşturuyorum std::chrono::hh_mm_ss: timeOfDay. C ++ 14'ten kronoral krono sayesinde, günün bir nesnesini başlatmak için biraz zaman ekleyebilirim. C ++ 20 ile yapabilirsin timeOfDay Doğrudan harcayın (2). Gerisi okumak kolay olmalı. (4) Zamanın bileşenleri saatler, dakika, saniye ve saniye olarak harcanmıştır. (5) Zamanın süresi birkaç saniye içinde gece yarısına döndü. (6) Daha ilginçtir: Bildirilen saniye (2) 'de gösterilen zamana karşılık gelir. (7) Belirtilen sürenin sabah olması durumunda geri döner. (8) Son olarak, belirtilen saatin 12 saat eşdeğerini döndürür.
İşte programın baskısı:

Takvim tarihi
C ++ 20'de yeni bir Chrono uzantısı verisi türü bir takvim tarihidir. C ++ 20, bir takvim tarihi oluşturmanın ve onunla etkileşime girmenin çeşitli yollarını destekler. Her şeyden önce: Takvim tarihi için ne beklerim?
- A Takvim tarihi Bir yıl, bir ay ve bir günden oluşur. Bu nedenle, C ++ 20'de özel bir veri türü vardır. std::chrono::year_month_day. C ++ 20'nin sunabileceği çok daha fazlası var. Aşağıdaki tablo, farklı uygulamaları göstermeden önce takvim türlerine genel bir bakış sağlamalıdır.

Sayesinde Güzel Sözdizimi yapabilirsiniz std::chrono:
Takvimler için veri türleri çeşitli işlemleri destekler. Aşağıdaki tablo genel bir bakış sunmaktadır. Okunabilirlik nedenlerinden dolayı, bazen adın adını görmezden geliyorum std::chrono.

Operasyonları artırma ve azaltma ++/-- Önek ve Postfix sürümünde desteklenirler. Ekleme veya Çıkarma +/- veri türü nesneleri gerektirir std::chrono::duration. Yani, veri türünün iki nesnesi arasındaki farkınız varsa std::chrono::day formlar, türden bir nesne alın std::chrono::days. <=> Yeni üç yollu karşılaştırma operatörüdür.
Aşağıdaki program takvim türleri için işlemler kullanır:
// calendarOperations.cpp
#include <chrono>
#include <iostream>
int main() {
std::cout << 'n';
using std::chrono::Monday;
using std::chrono::Saturday;
using std::chrono::March;
using std::chrono::June;
using std::chrono::July;
using std::chrono::days;
using std::chrono::months;
using std::chrono::years;
using std::chrono::last;
using namespace std::chrono_literals;
std::cout << std::boolalpha;
std::cout << "March: " << March << 'n';
std::cout << "March + months(3): "
<< March + months(3) << 'n'; // (1)
std::cout << "March - months(25): "
<< March - months(25) << 'n'; // (5)
std::cout << "July - June: " << July - June
<< 'n'; // (6)
std::cout << "June < July: " << (June < July) << 'n'; // (7)
std::cout << 'n';
std::cout << "Saturday: " << Saturday << 'n';
std::cout << "Saturday + days(3): "
<< Saturday + days(3) << 'n'; // (2)
std::cout << "Saturday - days(22): "
<< Saturday - days(22) << 'n'; // (8)
std::cout << "Saturday - Monday: "
<< Saturday - Monday << 'n'; // (9)
std::cout << 'n';
std::cout << "2021y/March: " << 2021y/March << 'n'; // (3)
std::cout << "2021y/March + years(3) - months(35): " // (10)
<< 2021y/March + years(3) - months(35) << 'n';
std::cout << "2022y/July - 2021y/June: "
<< 2022y/July - 2021y/June << 'n'; // (11)
std::cout << "2021y/June > 2021y/July: "
<< (2021y/June > 2021y/July) << 'n'; // (12)
std::cout << 'n';
std::cout << "2021y/March/Saturday[last]: "
<< 2021y/March/Saturday[last] << 'n'; // (4)
std::cout << "2021y/March/Saturday[last] + months(13) " +
"+ years(3): "
<< 2021y/March/Saturday[last] +
months(13) + years(3) << 'n';
std::cout << "2021y/July/Saturday[last] - months(1) == " +
" 2021y/June/Saturday[last]: "
<< (2021y/July/Saturday[last] - months(1) ==
2021y/June/Saturday[last])
<< 'n';
std::cout << 'n';
}
Program işlemleri listeler std::chrono::month (1), std::chrono::weekday (2), std::chrono::year_month (3) e std::chrono::year_month_weekday_last (4).

Zamanın süresini eklerken veya çıkarırken std::chrono::months Modül işlemleri otomatik olarak kullanılır (5 ve 6). İki kişinin çıkarılması std::chrono::month-Plets 1 aya dönüşür. Bir ayı var 2629746 Saniye (7). Sonuç olarak, bir zaman geçirebilirsiniz std::chrono::days Takvim verilerine std::chrono::day Onlardan ekleyin veya kaldırıldı (8 ve 9). İki kişinin çıkarılması std::chrono::day-Borlar tercüme edilir std::chrono::days-Nesne. std::chrono::year_month Çıkarmayı (10), fark (11) ve zamanların (12) karşılaştırmasını etkinleştirin. Nesneler yazın std::chrono::weekday_last Zamanın eklenmesini/çıkarılmasını etkinleştirin std::chrono::months VE std::chrono::years. Dahası, yapabilirler std::chrono::weekday_last-Nesneler karşılaştırılır.
Sırada ne var?
C ++ 20, veri türlerinin kullanımını daha uygun hale getirmek için sabit ve gerçek anlamlı destekler.
(RME)