Home >Backend Development >C++ >How Can I Parse Date Strings and Calculate Elapsed Time Using C 11\'s std::chrono?

How Can I Parse Date Strings and Calculate Elapsed Time Using C 11\'s std::chrono?

Barbara Streisand
Barbara StreisandOriginal
2024-11-29 22:29:10622browse

How Can I Parse Date Strings and Calculate Elapsed Time Using C  11's std::chrono?

Parsing Date Strings with C 11 std::chrono

When working with date and time information, it's often necessary to parse a date string into a suitable data representation. For C 11, the std::chrono namespace provides powerful tools for handling time durations and time points.

Parsing Date Strings

To parse a date string into std::chrono, GCC provides the std::get_time function. Given a std::tm object and a format string, std::get_time can extract the date and time components from the input string. The following code snippet demonstrates this:

std::tm tm = {};
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");

GCC versions prior to 5 do not implement std::get_time. As an alternative, you can use strptime:

std::tm tm = {};
strptime("Thu Jan 9 2014 12:35:34", "%a %b %d %Y %H:%M:%S", &tm);

Calculating Elapsed Time

Once you have the parsed date and time in a std::tm object, you can convert it to a time_point using std::chrono::system_clock::from_time_t:

auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));

This time_point represents the parsed date and time in the current time zone. To calculate the elapsed time since the parsed date, subtract the current time_point from the parsed time_point:

auto now = std::chrono::system_clock::now();
auto elapsed = now - tp;

Accessing Time Components

The std::chrono::duration object provides access to the elapsed time components. To retrieve the number of seconds, minutes, hours, and days, use the following functions:

auto seconds = std::chrono::duration_cast<std::chrono::seconds>(elapsed).count();
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(elapsed).count();
auto hours = std::chrono::duration_cast<std::chrono::hours>(elapsed).count();
auto days = std::chrono::duration_cast<std::chrono::days>(elapsed).count();

By utilizing these techniques, you can effectively parse date strings into std::chrono time points and calculate the elapsed time since the parsed date, providing access to the desired time components in a convenient and efficient manner.

The above is the detailed content of How Can I Parse Date Strings and Calculate Elapsed Time Using C 11\'s std::chrono?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn