C ++ 'da zaman: Ayrıştırıcı için biçimlendirilmiş sesler
Bu makale, Chrono'nun C ++ 20'ye uzatılmasıyla ilgili ayrıntılı yolculuğumun on birinci.
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 kitapçısı, iki şekilde biçimlendirilmiş sesleri destekler. İşlevleri yapabilirsin std::chrono::from_stream VEYA std::chrono:
arse kullanmak. Her iki işlev de bir giriş akımı gerektirir ve bir seferde formatın spesifikasyonuna göre girişi analiz eder. Formatın tüm özellikleri hariç %q Zaman süreleri için litre bağlı birim için.
std::chrono::from_stream
std::chrono::from_stream Farklı saat türleri için aşırı yük vardır.
Saat
Ayrıca bir kısaltma da olabilir abb Bir saat dilimi ve UTC zaman ofseti için: std::chrono::from_stream(is, fmt, chro, abb, off). Ofset veri türüne sahiptir std::chrono::minutes.
Program inputChrono.cpp Bir giriş akımından bir saat ve takvim tarihini okumak için biçimlendirilmiş bir giriş kullanın.
// inputChrono.cpp
#include <chrono>
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::cout << 'n';
std::chrono::sys_seconds timePoint;
std::istringstream iStream1{"2021-08-11 21:49:35"}; //(1)
std::chrono::from_stream(iStream1, "%F %T", timePoint); //(2)
if (iStream1) std::cout << "timePoint: "
<< timePoint << 'n';
else std::cerr << "timepoint: Reading failedn";
std::chrono::year_month_day date1;
std::istringstream iStream2{"11/08/21"}; //(3)
std::chrono::from_stream(iStream2, "%x", date1); //(4)
if (iStream2) std::cout << "date1: " << date1 << 'n';
else std::cerr << "date1: Reading failedn";
std::chrono::year_month_day date2;
std::istringstream iStream3{"11/15/21"};
std::chrono::from_stream(iStream3, "%x", date2); //(5)
if (iStream3) std::cout << "date2: " << date2 << 'n';
else std::cerr << "date2: Reading failedn";
std::cout << 'n';
}
Giriş akımındaki (1 ve 2) verilerde (iStream1) Biçim dizesi ("%F %T"). Aynı şey giriş akımı için de geçerli iStream2 (3) ve ilgili biçim dizesi "%x" (4). Aksine, on beşinci ay yoktur ve (5) 'de analizin geçişi başarısız olur. Sonuç olarak, iStream3 ayarlamak. Kullanımı iStream3 Boole ifade sonuçlarında false.
std::chrono:
arse
Analog std::chrono::from_stream Çalışabilirsin std::chrono:
arse Girdi analizi için kullanın. Aşağıdaki kod parçası denkliğini göstermektedir.
std::chrono::from_stream(is, fmt, chro)
is >> std::chrono:
arse(fmt, chro)
Yerine std::chrono::from_stream hale gelmek std::chrono:
arse Doğrudan giriş akımında is isminde. std::chrono:
arse Ayrıca bir format dizesine ihtiyaç duyuyor fmt Ve bir nesne chrono chro.
Bu nedenle önceki programı yapabilirim inputChrono.cpp ile std::chrono::from_stream Doğrudan Programda inputChronoParse.cpp ile std::chrono:
arse yeniden yazın.
// inputChronoParse.cpp
#include <chrono>
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::cout << 'n';
std::chrono::sys_seconds timePoint;
std::istringstream iStream1{"2021-08-11 21:49:35"};
iStream1 >> std::chrono:
arse("%F %T", timePoint);
if (iStream1) std::cout << "timePoint: " << timePoint << 'n';
else std::cerr << "timepoint: Reading failedn";
std::chrono::year_month_day date1;
std::istringstream iStream2{"11/08/21"};
iStream2 >> std::chrono:
arse("%x", date1);
if (iStream2) std::cout << "date1: " << date1 << 'n';
else std::cerr << "date1: Reading failedn";
std::chrono::year_month_day date2;
std::istringstream iStream3{"11/15/21"};
iStream3 >> std::chrono:
arse("%x", date2);
if (iStream3) std::cout << "date2: " << date2 << 'n';
else std::cerr << "date2: Reading failedn";
std::cout << 'n';
}
Sırada ne var?
Şimdi Chrono Kütüphanesi hakkındaki tam fikrim için hazırım. Bir sonraki makalemde C ++ 20'deki rekabet üzerine yazacağım.
(RME)
C ++ 'da zaman: Ayrıştırıcı için biçimlendirilmiş sesler

Bu makale, Chrono'nun C ++ 20'ye uzatılmasıyla ilgili ayrıntılı yolculuğumun on birinci.
- C ++ 20'de zaman: Chrono Terminolojisine Giriş
- C ++ 20'de Zaman: Krono Terminolojisine Zaman ve Zamanla Giriş
- C ++ 20'de zaman: Günün saati ve takvimin tarihi için yeni veri türleri
- C ++ 20'de Zaman: Takvim Tarihleri Oluştur
- C ++ 20'de zaman: Takvimin tarihlerini temsil eder ve kontrol eder
- C ++ 20'de zaman: Sorgu takviminden veriler ve sipariş verileri
- C ++ 20'de zaman: Zaman dilimleriyle işyerinde detaylar
- C ++ 20'de FUSI Zamanı: Çevrimiçi Dersler
- C ++ 20'de zaman: Chrono I/O
- C ++ 20: Chrono I/O: Biçimlendirilmemiş ve biçimlendirilmemiş

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 kitapçısı, iki şekilde biçimlendirilmiş sesleri destekler. İşlevleri yapabilirsin std::chrono::from_stream VEYA std::chrono:
std::chrono::from_stream
std::chrono::from_stream Farklı saat türleri için aşırı yük vardır.
Saat
- std::chrono::system_time
- std::chrono::utc_time
- std::chrono::tai_time
- std::chrono::gps_time
- std::chrono::file_time
- std::chrono::local_time
- std::chrono::year_month_day
- std::chrono::year_month
- std::chrono::month_day
- std::chrono::weekday
- std::chrono::year
- std::chrono::month
- std::chrono::day
Ayrıca bir kısaltma da olabilir abb Bir saat dilimi ve UTC zaman ofseti için: std::chrono::from_stream(is, fmt, chro, abb, off). Ofset veri türüne sahiptir std::chrono::minutes.
Program inputChrono.cpp Bir giriş akımından bir saat ve takvim tarihini okumak için biçimlendirilmiş bir giriş kullanın.
// inputChrono.cpp
#include <chrono>
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::cout << 'n';
std::chrono::sys_seconds timePoint;
std::istringstream iStream1{"2021-08-11 21:49:35"}; //(1)
std::chrono::from_stream(iStream1, "%F %T", timePoint); //(2)
if (iStream1) std::cout << "timePoint: "
<< timePoint << 'n';
else std::cerr << "timepoint: Reading failedn";
std::chrono::year_month_day date1;
std::istringstream iStream2{"11/08/21"}; //(3)
std::chrono::from_stream(iStream2, "%x", date1); //(4)
if (iStream2) std::cout << "date1: " << date1 << 'n';
else std::cerr << "date1: Reading failedn";
std::chrono::year_month_day date2;
std::istringstream iStream3{"11/15/21"};
std::chrono::from_stream(iStream3, "%x", date2); //(5)
if (iStream3) std::cout << "date2: " << date2 << 'n';
else std::cerr << "date2: Reading failedn";
std::cout << 'n';
}
Giriş akımındaki (1 ve 2) verilerde (iStream1) Biçim dizesi ("%F %T"). Aynı şey giriş akımı için de geçerli iStream2 (3) ve ilgili biçim dizesi "%x" (4). Aksine, on beşinci ay yoktur ve (5) 'de analizin geçişi başarısız olur. Sonuç olarak, iStream3 ayarlamak. Kullanımı iStream3 Boole ifade sonuçlarında false.

std::chrono:
Analog std::chrono::from_stream Çalışabilirsin std::chrono:
std::chrono::from_stream(is, fmt, chro)
is >> std::chrono:
Yerine std::chrono::from_stream hale gelmek std::chrono:
Bu nedenle önceki programı yapabilirim inputChrono.cpp ile std::chrono::from_stream Doğrudan Programda inputChronoParse.cpp ile std::chrono:
// inputChronoParse.cpp
#include <chrono>
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::cout << 'n';
std::chrono::sys_seconds timePoint;
std::istringstream iStream1{"2021-08-11 21:49:35"};
iStream1 >> std::chrono:
if (iStream1) std::cout << "timePoint: " << timePoint << 'n';
else std::cerr << "timepoint: Reading failedn";
std::chrono::year_month_day date1;
std::istringstream iStream2{"11/08/21"};
iStream2 >> std::chrono:
if (iStream2) std::cout << "date1: " << date1 << 'n';
else std::cerr << "date1: Reading failedn";
std::chrono::year_month_day date2;
std::istringstream iStream3{"11/15/21"};
iStream3 >> std::chrono:
if (iStream3) std::cout << "date2: " << date2 << 'n';
else std::cerr << "date2: Reading failedn";
std::cout << 'n';
}
Sırada ne var?
Şimdi Chrono Kütüphanesi hakkındaki tam fikrim için hazırım. Bir sonraki makalemde C ++ 20'deki rekabet üzerine yazacağım.
(RME)