C ++ 20'de Miller: Çevrimiçi Dersler | Haberler Online
Bu makale, Chrono'nun C ++ 20'ye uzatılmasıyla ilgili ayrıntılı yolculuğumun sekizincidir:
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.
Çevrimiçi dersler için farklı zaman milleri
Program onlineClass.cpp Aşağıdaki soru cevapları: 7:00, 13: 00'da çevrimiçi bir kursa başladığımda belirli saat dilimlerinde ne kadar geç. Veya 17:00 yerel saat (Almanya)?
Çevrimiçi kurs 1 Şubat 2021'de başlamalı ve 4 saat talep etmelidir. Yaz zamanı nedeniyle, doğru yanıtı almak için takvim tarihi önemlidir.
#include <chrono>
#include <algorithm>
#include <iomanip>
#include <iostream>
using namespace std::chrono_literals;
template <typename ZonedTime>
auto getMinutes(const ZonedTime& zonedTime) { // (1)
return std::chrono::floor<std::chrono::minutes>(zonedTime.get_local_time());
}
void printStartEndTimes(const std::chrono::local_days& localDay, // (2)
const std::chrono::hours& h,
const std::chrono::hours& durationClass,
const std::initializer_list<std::string>& timeZones ) {
std::chrono::zoned_time startDate{std::chrono::current_zone(), localDay + h}; // (4)
std::chrono::zoned_time endDate{std::chrono::current_zone(),
localDay + h + durationClass};
std::cout << std::format("Local time: [{}, {}]n", getMinutes(startDate), getMinutes(endDate));
auto longestStringSize = std::max(timeZones, [](const std::string& a, // (5)
const std::string& b) { return a.size() < b.size(); }).size();
std::string formatTimeZones = " {0:<{3}} [{1}, {2}]n"; // (7)
for (auto timeZone: timeZones) { // (6)
std::cout << std::vformat(formatTimeZones, std::make_format_args(timeZone,
getMinutes(std::chrono::zoned_time(timeZone, startDate)),
getMinutes(std::chrono::zoned_time(timeZone, endDate)),
longestStringSize + 1));
}
}
int main() {
using namespace std::string_literals;
std::cout << 'n';
constexpr auto classDay{std::chrono::year(2021)/2/1};
constexpr auto durationClass = 4h;
auto timeZones = {"America/Los_Angeles"s, "America/Denver"s,
"America/New_York"s, "Europe/London"s,
"Europe/Minsk"s, "Europe/Moscow"s,
"Asia/Kolkata"s, "Asia/Novosibirsk"s,
"Asia/Singapore"s, "Australia/Perth"s,
"Australia/Sydney"s};
for (auto startTime: {7h, 13h, 17h}) { // (3)
printStartEndTimes(std::chrono::local_days{classDay}, startTime,
durationClass, timeZones);
std::cout << 'n';
}
std::cout << 'n';
}
Benden önce işlevlerde getMinutes (Satır 1) e printStartEndTimes (Riga 2) Birkaç kelime daha yapmak istiyorum mainİşlevi kaybedin. . main-Bilat öğretim gününü, derslerin süresini ve her zaman dilimini belirler. Sonunda menzil dayanıyor for-Chipe (Riga 3) Çevrimiçi bir kurs için tüm olası başlangıç noktaları. Bu işlev sayesinde gerekli tüm bilgiler sunulmaktadır (Riga 2).
Çizgi ile başlayan birkaç satır (4) hesaplayın startDate VE endDate Takvim tarihine başlangıcı ve dersleri ekleyerek eğitimim. Her iki değer de işlevi kullanarak kullanılır getMinutes (Satır 1). std::floor<std::chrono::minutes>(zonedTime.get_local_time()) Kaydedilen zamanı alın std::chrono::zoned_time Ve değeri minimum çözünürlüğe indirin. Program çıkışını doğru bir şekilde hizalamak için, çizgi (5), zaman millerinin tüm adlarının en uzun boyutunu belirler. Hat (6) ITETE Tüm zamanlarda iğler ve bunun adını ve her çevrimiçi sınıfın başlangıcını ve sonunu gösterir. Bazı takvim verileri günlük sınırları bile aşar.
7. satırdaki biçim dizesi “ {0:<{3}} [{1}, {2}]n“Bazı kelimeler kazanın. Bu lvalue işlevler gerektirir std::vformat VE std::make_format_args. Biçim dizesindeki sayı konulardaki konumu temsil eder. . {3} En uzun saat diliminin adı için bir yer tutucudur.
Sırada ne var?
Chrono I/O, kronotipleri okumak ve yazmaktan oluşur. Farklı veri türleri, gerçekleştirilmemiş yazmayı ve yeni biçimlendirme kütüphanesi ile biçimlendirilmiş mektup destekler. Bu kütüphanenin de işlevi var std::chrono:
arse()Bu çok güçlü bir akıştan okumayı sağlar.
()
Bu makale, Chrono'nun C ++ 20'ye uzatılmasıyla ilgili ayrıntılı yolculuğumun sekizincidir:


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.
Çevrimiçi dersler için farklı zaman milleri
Program onlineClass.cpp Aşağıdaki soru cevapları: 7:00, 13: 00'da çevrimiçi bir kursa başladığımda belirli saat dilimlerinde ne kadar geç. Veya 17:00 yerel saat (Almanya)?
Çevrimiçi kurs 1 Şubat 2021'de başlamalı ve 4 saat talep etmelidir. Yaz zamanı nedeniyle, doğru yanıtı almak için takvim tarihi önemlidir.
#include <chrono>
#include <algorithm>
#include <iomanip>
#include <iostream>
using namespace std::chrono_literals;
template <typename ZonedTime>
auto getMinutes(const ZonedTime& zonedTime) { // (1)
return std::chrono::floor<std::chrono::minutes>(zonedTime.get_local_time());
}
void printStartEndTimes(const std::chrono::local_days& localDay, // (2)
const std::chrono::hours& h,
const std::chrono::hours& durationClass,
const std::initializer_list<std::string>& timeZones ) {
std::chrono::zoned_time startDate{std::chrono::current_zone(), localDay + h}; // (4)
std::chrono::zoned_time endDate{std::chrono::current_zone(),
localDay + h + durationClass};
std::cout << std::format("Local time: [{}, {}]n", getMinutes(startDate), getMinutes(endDate));
auto longestStringSize = std::max(timeZones, [](const std::string& a, // (5)
const std::string& b) { return a.size() < b.size(); }).size();
std::string formatTimeZones = " {0:<{3}} [{1}, {2}]n"; // (7)
for (auto timeZone: timeZones) { // (6)
std::cout << std::vformat(formatTimeZones, std::make_format_args(timeZone,
getMinutes(std::chrono::zoned_time(timeZone, startDate)),
getMinutes(std::chrono::zoned_time(timeZone, endDate)),
longestStringSize + 1));
}
}
int main() {
using namespace std::string_literals;
std::cout << 'n';
constexpr auto classDay{std::chrono::year(2021)/2/1};
constexpr auto durationClass = 4h;
auto timeZones = {"America/Los_Angeles"s, "America/Denver"s,
"America/New_York"s, "Europe/London"s,
"Europe/Minsk"s, "Europe/Moscow"s,
"Asia/Kolkata"s, "Asia/Novosibirsk"s,
"Asia/Singapore"s, "Australia/Perth"s,
"Australia/Sydney"s};
for (auto startTime: {7h, 13h, 17h}) { // (3)
printStartEndTimes(std::chrono::local_days{classDay}, startTime,
durationClass, timeZones);
std::cout << 'n';
}
std::cout << 'n';
}
Benden önce işlevlerde getMinutes (Satır 1) e printStartEndTimes (Riga 2) Birkaç kelime daha yapmak istiyorum mainİşlevi kaybedin. . main-Bilat öğretim gününü, derslerin süresini ve her zaman dilimini belirler. Sonunda menzil dayanıyor for-Chipe (Riga 3) Çevrimiçi bir kurs için tüm olası başlangıç noktaları. Bu işlev sayesinde gerekli tüm bilgiler sunulmaktadır (Riga 2).
Çizgi ile başlayan birkaç satır (4) hesaplayın startDate VE endDate Takvim tarihine başlangıcı ve dersleri ekleyerek eğitimim. Her iki değer de işlevi kullanarak kullanılır getMinutes (Satır 1). std::floor<std::chrono::minutes>(zonedTime.get_local_time()) Kaydedilen zamanı alın std::chrono::zoned_time Ve değeri minimum çözünürlüğe indirin. Program çıkışını doğru bir şekilde hizalamak için, çizgi (5), zaman millerinin tüm adlarının en uzun boyutunu belirler. Hat (6) ITETE Tüm zamanlarda iğler ve bunun adını ve her çevrimiçi sınıfın başlangıcını ve sonunu gösterir. Bazı takvim verileri günlük sınırları bile aşar.
7. satırdaki biçim dizesi “ {0:<{3}} [{1}, {2}]n“Bazı kelimeler kazanın. Bu lvalue işlevler gerektirir std::vformat VE std::make_format_args. Biçim dizesindeki sayı konulardaki konumu temsil eder. . {3} En uzun saat diliminin adı için bir yer tutucudur.
Sırada ne var?
Chrono I/O, kronotipleri okumak ve yazmaktan oluşur. Farklı veri türleri, gerçekleştirilmemiş yazmayı ve yeni biçimlendirme kütüphanesi ile biçimlendirilmiş mektup destekler. Bu kütüphanenin de işlevi var std::chrono:
()