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!