C ++ 'da zaman: Ayrıştırıcı için biçimlendirilmiş sesler

Adanali

Active member
C ++ 'da zaman: Ayrıştırıcı için biçimlendirilmiş sesler


  1. 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.

  1. C ++ 20'de zaman: Chrono Terminolojisine Giriş
  2. C ++ 20'de Zaman: Krono Terminolojisine Zaman ve Zamanla Giriş
  3. C ++ 20'de zaman: Günün saati ve takvimin tarihi için yeni veri türleri
  4. C ++ 20'de Zaman: Takvim Tarihleri Oluştur
  5. C ++ 20'de zaman: Takvimin tarihlerini temsil eder ve kontrol eder
  6. C ++ 20'de zaman: Sorgu takviminden veriler ve sipariş verileri
  7. C ++ 20'de zaman: Zaman dilimleriyle işyerinde detaylar
  8. C ++ 20'de FUSI Zamanı: Çevrimiçi Dersler
  9. C ++ 20'de zaman: Chrono I/O
  10. 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::parse 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

  • std::chrono::system_time
  • std::chrono::utc_time
  • std::chrono::tai_time
  • std::chrono::gps_time
  • std::chrono::file_time
  • std::chrono::local_time
Takvim verileri

  • 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
Çeşitli aşırı yükler, temel formda bir giriş akımı gerektirir isBir Biçim Dizesi fmt Bir veya bir takvim nesnesidir chro – std::chrono::from_stream(is, fmt, chro). Bu nedenle giriş akımından Chrono nesnesi format halkasına göre bağışlanır.

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>&#13;
#include <iostream>&#13;
#include <string>&#13;
#include <sstream>&#13;
&#13;
int main() {&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::chrono::sys_seconds timePoint;&#13;
std::istringstream iStream1{"2021-08-11 21:49:35"}; //(1)&#13;
std::chrono::from_stream(iStream1, "%F %T", timePoint); //(2)&#13;
if (iStream1) std::cout << "timePoint: " &#13;
<< timePoint << 'n';&#13;
else std::cerr << "timepoint: Reading failedn";&#13;
&#13;
std::chrono::year_month_day date1;&#13;
std::istringstream iStream2{"11/08/21"}; //(3)&#13;
std::chrono::from_stream(iStream2, "%x", date1); //(4)&#13;
if (iStream2) std::cout << "date1: " << date1 << 'n';&#13;
else std::cerr << "date1: Reading failedn";&#13;
&#13;
std::chrono::year_month_day date2;&#13;
std::istringstream iStream3{"11/15/21"};&#13;
std::chrono::from_stream(iStream3, "%x", date2); //(5)&#13;
if (iStream3) std::cout << "date2: " << date2 << 'n';&#13;
else std::cerr << "date2: Reading failedn";&#13;
&#13;
std::cout << 'n';&#13;
&#13;
}


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::parse


Analog std::chrono::from_stream Çalışabilirsin std::chrono::parse Girdi analizi için kullanın. Aşağıdaki kod parçası denkliğini göstermektedir.


std::chrono::from_stream(is, fmt, chro)&#13;
is >> std::chrono::parse(fmt, chro)


Yerine std::chrono::from_stream hale gelmek std::chrono::parse Doğrudan giriş akımında is isminde. std::chrono::parse 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::parse yeniden yazın.


// inputChronoParse.cpp&#13;
&#13;
#include <chrono>&#13;
#include <iostream>&#13;
#include <string>&#13;
#include <sstream>&#13;
&#13;
int main() {&#13;
&#13;
std::cout << 'n';&#13;
&#13;
std::chrono::sys_seconds timePoint;&#13;
std::istringstream iStream1{"2021-08-11 21:49:35"};&#13;
iStream1 >> std::chrono::parse("%F %T", timePoint);&#13;
if (iStream1) std::cout << "timePoint: " << timePoint << 'n';&#13;
else std::cerr << "timepoint: Reading failedn";&#13;
&#13;
std::chrono::year_month_day date1;&#13;
std::istringstream iStream2{"11/08/21"};&#13;
iStream2 >> std::chrono::parse("%x", date1);&#13;
if (iStream2) std::cout << "date1: " << date1 << 'n';&#13;
else std::cerr << "date1: Reading failedn";&#13;
&#13;
std::chrono::year_month_day date2;&#13;
std::istringstream iStream3{"11/15/21"};&#13;
iStream3 >> std::chrono::parse("%x", date2);&#13;
if (iStream3) std::cout << "date2: " << date2 << 'n';&#13;
else std::cerr << "date2: Reading failedn";&#13;
&#13;
std::cout << 'n';&#13;
&#13;
}


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)
 
Üst