C ++ 20'de Zaman: Takvim Tarihleri Oluştur
C ++ 20, takvimler ve tarih için veri türlerinin kullanımını basitleştirmek için sabit ve tam anlamıyla destekler.
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.
Temeller hakkında daha fazla bilgi edinmek istiyorsanız, önceki makalemi okumalısınız:
Takvim türleri için sabit ve kelimenin tam anlamıyla
Sabitlerle başlayalım std::chrono::weekday VE std::chrono::month.
std::chrono::Monday
std::chrono::Thuesday
std::chrono::Wednesday
std::chrono::Thursday
std::chrono::Friday
std::chrono::Saturday
std::chrono::Sunday
std::chrono::January
std::chrono::February
std::chrono::March
std::chrono::April
std::chrono::May
std::chrono::June
std::chrono::July
std::chrono::August
std::chrono::September
std::chrono::October
std::chrono::November
std::chrono:
ecember
C ++ 20 veri türlerini destekler std::chrono::day VE std::chrono::year İki yeni litre: d VE y. Daha fazla ayrıntı C ++ 20: Time ile Chrono Terminolojisine Giriş.
Takvim Verileri Oluştur
Program createCalendar.cpp Takvim verileri oluşturmanın çeşitli yollarını gösterin.
// createCalendar.cpp
#include <chrono>
#include <iostream>
int main() {
std::cout << 'n';
using namespace std::chrono_literals;
using std::chrono::last;
using std::chrono::year;
using std::chrono::month;
using std::chrono::day;
using std::chrono::year_month;
using std::chrono::year_month_day;
using std::chrono::year_month_day_last;
using std::chrono::year_month_weekday;
using std::chrono::year_month_weekday_last;
using std::chrono::month_weekday;
using std::chrono::month_weekday_last;
using std::chrono::month_day;
using std::chrono::month_day_last;
using std::chrono::weekday_last;
using std::chrono::weekday;
using std::chrono::January;
using std::chrono::February;
using std::chrono::June;
using std::chrono::March;
using std::chrono::October;
using std::chrono::Monday;
using std::chrono::Thursday;
using std::chrono::Sunday;
constexpr auto
yearMonthDay{year(1940)/month(6)/day(26)}; // (1)
std::cout << yearMonthDay << " ";
std::cout << year_month_day(1940y, June, 26d) << 'n'; // (2)
std::cout << 'n';
constexpr auto yearMonthDayLast{year(2010)/March/last}; // (3)
std::cout << yearMonthDayLast << " ";
std::cout <<
year_month_day_last(2010y, month_day_last(month(3)))
<< 'n';
constexpr auto
yearMonthWeekday{year(2020)/March/Thursday[2]}; // (4)
std::cout << yearMonthWeekday << " ";
std::cout << year_month_weekday(2020y,
month(March),
Thursday[2]) << 'n';
constexpr auto
yearMonthWeekdayLast{year(2010)/March/Monday[last]}; // (5)
std::cout << yearMonthWeekdayLast << " ";
std::cout << year_month_weekday_last(2010y,
month(March),
weekday_last(Monday));
std::cout << "nn";
constexpr auto day_{day(19)}; // (6)
std::cout << day_ << " ";
std::cout << day(19) << 'n';
constexpr auto month_{month(1)}; // (7)
std::cout << month_ << " ";
std::cout << month(1) << 'n';
constexpr auto year_{year(1988)}; // (8)
std::cout << year_ << " ";
std::cout << year(1988) << 'n';
constexpr auto weekday_{weekday(5)};
std::cout << weekday_ << " ";
std::cout << weekday(5) << 'n';
constexpr auto yearMonth{year(1988)/1};
std::cout << yearMonth << " ";
std::cout << year_month(year(1988), January) << 'n';
constexpr auto monthDay{10/day(22)};
std::cout << monthDay << " ";
std::cout << month_day(October, day(22)) << 'n';
constexpr auto monthDayLast{June/last};
std::cout << monthDayLast << " ";
std::cout << month_day_last(month(6)) << 'n';
constexpr auto monthWeekday{2/Monday[3]};
std::cout << monthWeekday << " ";
std::cout << month_weekday(February, Monday[3]) << 'n';
constexpr auto monthWeekDayLast{June/Sunday[last]};
std::cout << monthWeekDayLast << " ";
std::cout << month_weekday_last(June, weekday_last(Sunday))
<< 'n';
std::cout << 'n';
}
Bir takvim tarihi oluşturmanın iki yolu vardır: SO -CIVED Sözdizimi yearMonthDay{year(1940)/month(6)/day(26)} (1) veya açık verilerin türü date::year_month_day(1940y, June, 26d) (2). Bir sonraki bölümde sevimli sözdiziminin açıklaması olarak kalıyorum. Açık veri türü ilginç çünkü 1940y,, 26d ve önceden tanımlanmış sabit June kullanılmış. Bu programın bariz bir kısmıydı.
(3), (4) ve (5) takvim verileri oluşturmak için başka yollar sunar.
Bu programın baskısı:
Söz verdiği gibi, şimdi sevimli sözdizimi yazmak istiyorum.
Güzel Sözdizimi
Sevimli sözdizimi, bir takvim tarihi belirlemek için aşırı yük bölüm operatörlerinden oluşur. Operatörler zamanın gerçekleri için aşırı destek yükü (ör. 2020y, 31d) VE std::chrono::month Sabit std::chrono::January, std::chrono::February, ..., std::chrono:
ecember.
Sevimli sözdizimi ile yıl, ay ve günün aşağıdaki üç kombinasyonu mümkündür.
year/month/day
day/month/year
month/day/year
Bu kombinasyonlar keyfi olarak seçilmez. Tüm dünyada en sık kullanılanlardır. Başka herhangi bir kombinasyona izin verilmez.
Bu yüzden veri türüne sahipseniz year,, month VEYA day İlk konu için seçilen, diğer iki konunun türü artık gerekli değildir ve bir sayı bile yapar.
// cuteSyntax.cpp
#include <chrono>
#include <iostream>
int main() {
std::cout << 'n';
constexpr auto yearMonthDay{std::chrono::year(1966)/6/26};
std::cout << yearMonthDay << 'n';
constexpr auto dayMonthYear{std::chrono::day(26)/6/1966};
std::cout << dayMonthYear << 'n';
constexpr auto monthDayYear{std::chrono::month(6)/26/1966};
std::cout << monthDayYear << 'n';
constexpr auto
yearDayMonth{std::chrono::year(1966)/std::chrono::month(26)/6};
std::cout << yearDayMonth << 'n';
std::cout << 'n';
Yıl/gün/aylık en son değerlere izin verilmez ve bir terim oranına yol açar.
Sırada ne var?
Takvim tarihinde {Jahr(2010)/March/last} Begible bir biçimde, örneğin 2020-03-31, operatörler geliyor local_days VEYA sys_days kullanılmış.
(RME)
C ++ 20'de Zaman: Takvim Tarihleri Oluştur
C ++ 20, takvimler ve tarih için veri türlerinin kullanımını basitleştirmek için sabit ve tam anlamıyla destekler.

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.
Temeller hakkında daha fazla bilgi edinmek istiyorsanız, önceki makalemi okumalısınız:

Takvim türleri için sabit ve kelimenin tam anlamıyla
Sabitlerle başlayalım std::chrono::weekday VE std::chrono::month.
std::chrono::Monday
std::chrono::Thuesday
std::chrono::Wednesday
std::chrono::Thursday
std::chrono::Friday
std::chrono::Saturday
std::chrono::Sunday
std::chrono::January
std::chrono::February
std::chrono::March
std::chrono::April
std::chrono::May
std::chrono::June
std::chrono::July
std::chrono::August
std::chrono::September
std::chrono::October
std::chrono::November
std::chrono:
C ++ 20 veri türlerini destekler std::chrono::day VE std::chrono::year İki yeni litre: d VE y. Daha fazla ayrıntı C ++ 20: Time ile Chrono Terminolojisine Giriş.
Takvim Verileri Oluştur
Program createCalendar.cpp Takvim verileri oluşturmanın çeşitli yollarını gösterin.
// createCalendar.cpp
#include <chrono>
#include <iostream>
int main() {
std::cout << 'n';
using namespace std::chrono_literals;
using std::chrono::last;
using std::chrono::year;
using std::chrono::month;
using std::chrono::day;
using std::chrono::year_month;
using std::chrono::year_month_day;
using std::chrono::year_month_day_last;
using std::chrono::year_month_weekday;
using std::chrono::year_month_weekday_last;
using std::chrono::month_weekday;
using std::chrono::month_weekday_last;
using std::chrono::month_day;
using std::chrono::month_day_last;
using std::chrono::weekday_last;
using std::chrono::weekday;
using std::chrono::January;
using std::chrono::February;
using std::chrono::June;
using std::chrono::March;
using std::chrono::October;
using std::chrono::Monday;
using std::chrono::Thursday;
using std::chrono::Sunday;
constexpr auto
yearMonthDay{year(1940)/month(6)/day(26)}; // (1)
std::cout << yearMonthDay << " ";
std::cout << year_month_day(1940y, June, 26d) << 'n'; // (2)
std::cout << 'n';
constexpr auto yearMonthDayLast{year(2010)/March/last}; // (3)
std::cout << yearMonthDayLast << " ";
std::cout <<
year_month_day_last(2010y, month_day_last(month(3)))
<< 'n';
constexpr auto
yearMonthWeekday{year(2020)/March/Thursday[2]}; // (4)
std::cout << yearMonthWeekday << " ";
std::cout << year_month_weekday(2020y,
month(March),
Thursday[2]) << 'n';
constexpr auto
yearMonthWeekdayLast{year(2010)/March/Monday[last]}; // (5)
std::cout << yearMonthWeekdayLast << " ";
std::cout << year_month_weekday_last(2010y,
month(March),
weekday_last(Monday));
std::cout << "nn";
constexpr auto day_{day(19)}; // (6)
std::cout << day_ << " ";
std::cout << day(19) << 'n';
constexpr auto month_{month(1)}; // (7)
std::cout << month_ << " ";
std::cout << month(1) << 'n';
constexpr auto year_{year(1988)}; // (8)
std::cout << year_ << " ";
std::cout << year(1988) << 'n';
constexpr auto weekday_{weekday(5)};
std::cout << weekday_ << " ";
std::cout << weekday(5) << 'n';
constexpr auto yearMonth{year(1988)/1};
std::cout << yearMonth << " ";
std::cout << year_month(year(1988), January) << 'n';
constexpr auto monthDay{10/day(22)};
std::cout << monthDay << " ";
std::cout << month_day(October, day(22)) << 'n';
constexpr auto monthDayLast{June/last};
std::cout << monthDayLast << " ";
std::cout << month_day_last(month(6)) << 'n';
constexpr auto monthWeekday{2/Monday[3]};
std::cout << monthWeekday << " ";
std::cout << month_weekday(February, Monday[3]) << 'n';
constexpr auto monthWeekDayLast{June/Sunday[last]};
std::cout << monthWeekDayLast << " ";
std::cout << month_weekday_last(June, weekday_last(Sunday))
<< 'n';
std::cout << 'n';
}
Bir takvim tarihi oluşturmanın iki yolu vardır: SO -CIVED Sözdizimi yearMonthDay{year(1940)/month(6)/day(26)} (1) veya açık verilerin türü date::year_month_day(1940y, June, 26d) (2). Bir sonraki bölümde sevimli sözdiziminin açıklaması olarak kalıyorum. Açık veri türü ilginç çünkü 1940y,, 26d ve önceden tanımlanmış sabit June kullanılmış. Bu programın bariz bir kısmıydı.
(3), (4) ve (5) takvim verileri oluşturmak için başka yollar sunar.
- (3): Mart 2010'un son günü: {year(2010)/March/last} VEYA year_month_day_last(2010y,month_day_last(month(3)))
- (4): Mart 2020'nin ikinci Perşembe: {year(2020)/March/Thursday[2]} VEYA year_month_weekday(2020y, month(March), Thursday[2])
- (5): Mart 2010'un son Pazartesi günü: {year(2010)/March/Monday[last]} VEYA year_month_weekday_last(2010y, month(March), weekday_last(Monday))
Bu programın baskısı:

Söz verdiği gibi, şimdi sevimli sözdizimi yazmak istiyorum.
Güzel Sözdizimi
Sevimli sözdizimi, bir takvim tarihi belirlemek için aşırı yük bölüm operatörlerinden oluşur. Operatörler zamanın gerçekleri için aşırı destek yükü (ör. 2020y, 31d) VE std::chrono::month Sabit std::chrono::January, std::chrono::February, ..., std::chrono:
Sevimli sözdizimi ile yıl, ay ve günün aşağıdaki üç kombinasyonu mümkündür.
year/month/day
day/month/year
month/day/year
Bu kombinasyonlar keyfi olarak seçilmez. Tüm dünyada en sık kullanılanlardır. Başka herhangi bir kombinasyona izin verilmez.
Bu yüzden veri türüne sahipseniz year,, month VEYA day İlk konu için seçilen, diğer iki konunun türü artık gerekli değildir ve bir sayı bile yapar.
// cuteSyntax.cpp
#include <chrono>
#include <iostream>
int main() {
std::cout << 'n';
constexpr auto yearMonthDay{std::chrono::year(1966)/6/26};
std::cout << yearMonthDay << 'n';
constexpr auto dayMonthYear{std::chrono::day(26)/6/1966};
std::cout << dayMonthYear << 'n';
constexpr auto monthDayYear{std::chrono::month(6)/26/1966};
std::cout << monthDayYear << 'n';
constexpr auto
yearDayMonth{std::chrono::year(1966)/std::chrono::month(26)/6};
std::cout << yearDayMonth << 'n';
std::cout << 'n';
Yıl/gün/aylık en son değerlere izin verilmez ve bir terim oranına yol açar.

Sırada ne var?
Takvim tarihinde {Jahr(2010)/March/last} Begible bir biçimde, örneğin 2020-03-31, operatörler geliyor local_days VEYA sys_days kullanılmış.
(RME)