Namensräume
Varianten
Aktionen

std::chrono::operator+, std::chrono::operator- (std::chrono::year_month)

Von cppreference.com
< cpp‎ | chrono‎ | year month
 
 
 
 
constexpr std::chrono::year_month operator+( const std::chrono::year_month& ym,
                                             const std::chrono::years& dy ) noexcept;
(1) (seit C++20)
constexpr std::chrono::year_month operator+( const std::chrono::years& dy,
                                             const std::chrono::year_month& ym ) noexcept;
(2) (seit C++20)
constexpr std::chrono::year_month operator+( const std::chrono::year_month& ym,
                                             const std::chrono::months& dm ) noexcept;
(3) (seit C++20)
constexpr std::chrono::year_month operator+( const std::chrono::months& dm,
                                             const std::chrono::year_month& ym ) noexcept;
(4) (seit C++20)
constexpr std::chrono::year_month operator-( const std::chrono::year_month& ym,
                                             const std::chrono::years& dy ) noexcept;
(5) (seit C++20)
constexpr std::chrono::year_month operator-( const std::chrono::year_month& ym,
                                             const std::chrono::months& dm ) noexcept;
(6) (seit C++20)
constexpr std::chrono::months operator-( const std::chrono::year_month& ym1,
                                         const std::chrono::year_month& ym2 ) noexcept;
(7) (seit C++20)
1,2) Addiert dy.count() Jahre zu ym.
3,4) Addiert dm.count() Monate zu ym.
5) Subtrahiert dy.count() Jahre von ym.
6) Subtrahiert dm.count() Monate von ym.
7) Gibt die Differenz in Monaten zwischen den beiden Zeitpunkten zurück, die durch ym1 und ym2 repräsentiert werden.

Für Dauern, die sowohl in std::chrono::years als auch in std::chrono::months konvertierbar sind, werden die years-Überladungen (1,2,5) bevorzugt, falls der Aufruf sonst mehrdeutig wäre.

Inhalt

[edit] Rückgabewert

1,2) std::chrono::year_month(ym.year() + dy, ym.month())
3,4) Ein year_month-Wert z, so dass z - ym == dm und z.ok() == true.
5) ym + -dy
6) ym + -dm
7)
ym1.year() - ym2.year() + std::chrono::months(int(unsigned(ym1.month())) -
int(unsigned(ym2.month())))

[edit] Hinweise

Das Ergebnis der Subtraktion zweier year_month-Werte ist eine Dauer vom Typ std::chrono::months. Diese Einheit repräsentiert die Länge des durchschnittlichen Gregorianischen Monats (30,436875 Tage), und die resultierende Dauer hat keine Beziehung zur tatsächlichen Anzahl der Tage im betrachteten Zeitraum. Zum Beispiel ist das Ergebnis von 2017y/3 - 2017y/2 std::chrono::months(1), obwohl der Februar 2017 nur 28 Tage hat.

[edit] Beispiel

#include <cassert>
#include <chrono>
 
int main()
{
    auto ym{std::chrono::year(2021)/std::chrono::July};
 
    ym = ym + std::chrono::months(14);
    assert(ym.month() == std::chrono::September);
    assert(ym.year() == std::chrono::year(2022));
 
    ym = ym - std::chrono::years(3);
    assert(ym.month() == std::chrono::month(9));
    assert(ym.year() == std::chrono::year(2019));
 
    ym = ym + (std::chrono::September - std::chrono::month(2));
    assert(ym.month() == std::chrono::April);
    assert(ym.year() == std::chrono::year(2020));
}

[edit] Siehe auch

modifiziert das year_month um eine Anzahl von Monaten oder Jahren
(public member function) [edit]