C ++ 20: Chrono I/O: Biçimlendirilmemiş ve biçimlendirilmemiş
Bu makale, Chrono'nun C ++ 20'ye uzatılmasıyla ilgili ayrıntılı yolculuğumun onuncu.
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.
Biçimlendirilmemiş takvim verileri
Takvimin zaman, zamanları ve verileri gibi krono veri türlerinin çoğu, format bilgileri olmadan doğrudan yazmayı destekler. Bugün talihsiz takvimin bu verilerine devam ediyorum. Aşağıdaki tablo, takvim verilerinin standart çıkış formatını göstermektedir.
// 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';
}
İşte programın baskısı:
Biçimlendirilmiş ücretler
Aşağıdaki tabloda, kısa bir açıklama ve bir örnek dahil olmak üzere bilgileri format halinde göstermektedir. Tam açıklama cppReference.com/chrono/parse sayfasında bulunabilir.
Aşağıdaki program, takvimin saat ve tarihi için özellikleri kullanır.
// formattedOutputChrono.cpp
#include <chrono>
#include <iostream>
#include <thread>
int main() {
std::cout << 'n';
using namespace std::literals;
auto start = std::chrono::steady_clock::now(); // (1)
std::this_thread::sleep_for(33ms);
auto end = std::chrono::steady_clock::now(); // (2)
std::cout << std::format("The job took {} secondsn", end - start);
std::cout << std::format("The job took {:%S} secondsn", end - start);
std::cout << 'n';
auto now = std::chrono::system_clock::now(); // (3)
std::cout << "now: " << now << 'n';
std::cout << "Specifier {:%c}: " << std::format("{:%c}n", now);
std::cout << "Specifier {:%x}: " << std::format("{:%x}n", now);
std::cout << "Specifier {:%F}: " << std::format("{:%F}n", now);
std::cout << "Specifier {:%D}: " << std::format("{:%D}n", now);
std::cout << "Specifier {:%Y}: " << std::format("{:%Y}n", now);
std::cout << "Specifier {:%y}: " << std::format("{:%y}n", now);
std::cout << "Specifier {:%b}: " << std::format("{:%b}n", now);
std::cout << "Specifier {:%B}: " << std::format("{:%B}n", now);
std::cout << "Specifier {:%m}: " << std::format("{:%m}n", now);
std::cout << "Specifier {:%W}: " << std::format("{:%W}n", now);
std::cout << "Specifier {:%U}: " << std::format("{:%U}n", now);
std::cout << "Specifier {:%a}: " << std::format("{:%a}n", now);
std::cout << "Specifier {:%A}: " << std::format("{:%A}n", now);
std::cout << "Specifier {:%w}: " << std::format("{:%w}n", now);
std::cout << "Specifier {:%u}: " << std::format("{:%u}n", now);
std::cout << "Specifier {:%e}: " << std::format("{:%e}n", now);
std::cout << "Specifier {:%d}: " << std::format("{:%d}n", now);
std::cout << 'n';
}
Arama std::chrono::steady_clock::now() (1 ve 2) geçerli saati belirler. Malısın std::chrono::steady_clock Bu saat monoton olduğu ve düzenlenemediği için ölçümler için kullanın, std::chrono::system_clock (3).
Sırada ne var?
Bir sonraki bölüm, biçimlendirilmiş girişler için formatın belirtimi ile ilgilidir.
Eğitim: Modern C ++ ile Programlama Yapıldı
(RME)
C ++ 20: Chrono I/O: Biçimlendirilmemiş ve biçimlendirilmemiş

Bu makale, Chrono'nun C ++ 20'ye uzatılmasıyla ilgili ayrıntılı yolculuğumun onuncu.

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.
Biçimlendirilmemiş takvim verileri
Takvimin zaman, zamanları ve verileri gibi krono veri türlerinin çoğu, format bilgileri olmadan doğrudan yazmayı destekler. Bugün talihsiz takvimin bu verilerine devam ediyorum. Aşağıdaki tablo, takvim verilerinin standart çıkış formatını göstermektedir.

// 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';
}
İşte programın baskısı:

Biçimlendirilmiş ücretler
Aşağıdaki tabloda, kısa bir açıklama ve bir örnek dahil olmak üzere bilgileri format halinde göstermektedir. Tam açıklama cppReference.com/chrono/parse sayfasında bulunabilir.



Aşağıdaki program, takvimin saat ve tarihi için özellikleri kullanır.
// formattedOutputChrono.cpp
#include <chrono>
#include <iostream>
#include <thread>
int main() {
std::cout << 'n';
using namespace std::literals;
auto start = std::chrono::steady_clock::now(); // (1)
std::this_thread::sleep_for(33ms);
auto end = std::chrono::steady_clock::now(); // (2)
std::cout << std::format("The job took {} secondsn", end - start);
std::cout << std::format("The job took {:%S} secondsn", end - start);
std::cout << 'n';
auto now = std::chrono::system_clock::now(); // (3)
std::cout << "now: " << now << 'n';
std::cout << "Specifier {:%c}: " << std::format("{:%c}n", now);
std::cout << "Specifier {:%x}: " << std::format("{:%x}n", now);
std::cout << "Specifier {:%F}: " << std::format("{:%F}n", now);
std::cout << "Specifier {:%D}: " << std::format("{:%D}n", now);
std::cout << "Specifier {:%Y}: " << std::format("{:%Y}n", now);
std::cout << "Specifier {:%y}: " << std::format("{:%y}n", now);
std::cout << "Specifier {:%b}: " << std::format("{:%b}n", now);
std::cout << "Specifier {:%B}: " << std::format("{:%B}n", now);
std::cout << "Specifier {:%m}: " << std::format("{:%m}n", now);
std::cout << "Specifier {:%W}: " << std::format("{:%W}n", now);
std::cout << "Specifier {:%U}: " << std::format("{:%U}n", now);
std::cout << "Specifier {:%a}: " << std::format("{:%a}n", now);
std::cout << "Specifier {:%A}: " << std::format("{:%A}n", now);
std::cout << "Specifier {:%w}: " << std::format("{:%w}n", now);
std::cout << "Specifier {:%u}: " << std::format("{:%u}n", now);
std::cout << "Specifier {:%e}: " << std::format("{:%e}n", now);
std::cout << "Specifier {:%d}: " << std::format("{:%d}n", now);
std::cout << 'n';
}

Arama std::chrono::steady_clock::now() (1 ve 2) geçerli saati belirler. Malısın std::chrono::steady_clock Bu saat monoton olduğu ve düzenlenemediği için ölçümler için kullanın, std::chrono::system_clock (3).
Sırada ne var?
Bir sonraki bölüm, biçimlendirilmiş girişler için formatın belirtimi ile ilgilidir.
Eğitim: Modern C ++ ile Programlama Yapıldı
(RME)