Adding and subtracting dates with std::chrono

Working with dates and time in C++ can be a bit tricky, but the std::chrono library provides a powerful set of tools for handling time-related operations. In this blog post, we’ll explore how to add and subtract dates using std::chrono.

Table of Contents

Introduction

The std::chrono library is part of the C++ Standard Library and provides a comprehensive set of tools for managing time. It includes various time-related components, such as clocks, durations, and time points.

When working with dates, std::chrono provides the std::chrono::time_point class, which represents a specific point in time. A time point can be created using a clock and is often used to perform date calculations.

Adding Dates

To add dates using std::chrono, we can utilize the std::chrono::duration class. A duration represents a specific span of time and can be added or subtracted from a time point.

Here’s an example that demonstrates how to add days to a given time_point:

#include <iostream>
#include <chrono>

int main()
{
    using namespace std::chrono;

    // Create a time_point representing a specific date
    system_clock::time_point currentDate = system_clock::now();

    // Add 7 days to the current date
    days sevenDays(7);
    system_clock::time_point newDate = currentDate + sevenDays;

    // Display the new date
    std::time_t newDateAsTimeT = system_clock::to_time_t(newDate);
    std::cout << "New date: " << std::ctime(&newDateAsTimeT);

    return 0;
}

In this example, we create a time_point called currentDate representing the current date. Then, we create a days object with a value of 7, which indicates 7 days.

We add the days object to the currentDate, resulting in a new time_point called newDate. Finally, we convert newDate to a std::time_t object and print it using std::ctime.

Subtracting Dates

Subtracting dates works similarly to adding dates. We can use the std::chrono::duration class to subtract a duration from a time point.

Here’s an example that demonstrates how to subtract a week from a given time_point:

#include <iostream>
#include <chrono>

int main()
{
    using namespace std::chrono;

    // Create a time_point representing a specific date
    system_clock::time_point currentDate = system_clock::now();

    // Subtract 7 days from the current date
    days sevenDays(7);
    system_clock::time_point newDate = currentDate - sevenDays;

    // Display the new date
    std::time_t newDateAsTimeT = system_clock::to_time_t(newDate);
    std::cout << "New date: " << std::ctime(&newDateAsTimeT);

    return 0;
}

In this example, we create a time_point called currentDate representing the current date. We subtract a days object with a value of 7 from the currentDate, resulting in a new time_point called newDate.

Finally, we convert newDate to a std::time_t object and print it using std::ctime.

Conclusion

The std::chrono library in C++ provides a convenient way to perform date calculations by using the std::chrono::duration class. By adding or subtracting durations from a time_point, we can easily manipulate dates and perform various time-related operations.

Using the examples in this blog post, you can now confidently add or subtract dates with std::chrono in your C++ programs.

References: