mirror of
https://github.com/HowardHinnant/date.git
synced 2025-08-06 06:04:27 +02:00
Added struct tm to time_point conversion function
@@ -24,6 +24,30 @@ system_clock::time_point = day_point(ymd) +
|
|||||||
hours(h) + minutes(min) + seconds(s);
|
hours(h) + minutes(min) + seconds(s);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Alternatively, using `struct tm` to hold the components:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
// Ignores tm_isdst!
|
||||||
|
template <typename Clock, typename Duration>
|
||||||
|
void to_time_point(const std::tm& t,
|
||||||
|
std::chrono::time_point<Clock, Duration>& tp)
|
||||||
|
{
|
||||||
|
using namespace std::chrono;
|
||||||
|
using namespace date;
|
||||||
|
// Component values (as obtained from an UI form, for example)
|
||||||
|
int y = t.tm_year + 1900;
|
||||||
|
auto ymd = year(y)/(t.tm_mon+1)/t.tm_mday; // Yields a year_month_day type
|
||||||
|
if (!ymd.ok())
|
||||||
|
throw std::runtime_error("Invalid date");
|
||||||
|
tp = day_point(ymd) +
|
||||||
|
hours(t.tm_hour) + minutes(t.tm_min) + seconds(t.tm_sec);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::chrono::system_clock::time_point tp;
|
||||||
|
std::tm components = {...};
|
||||||
|
to_time_point(components, tp);
|
||||||
|
```
|
||||||
|
|
||||||
<a name="components_to_time_point">
|
<a name="components_to_time_point">
|
||||||
### Obtaining `y/m/d h:m:s` components from a `time_point`
|
### Obtaining `y/m/d h:m:s` components from a `time_point`
|
||||||
(by [ecorm](https://github.com/ecorm))
|
(by [ecorm](https://github.com/ecorm))
|
||||||
@@ -63,7 +87,7 @@ std::tm to_calendar_time(std::chrono::time_point<Clock, Duration> tp)
|
|||||||
result.tm_min = tod.minutes().count();
|
result.tm_min = tod.minutes().count();
|
||||||
result.tm_hour = tod.hours().count();
|
result.tm_hour = tod.hours().count();
|
||||||
result.tm_mday = unsigned(ymd.day());
|
result.tm_mday = unsigned(ymd.day());
|
||||||
result.tm_mon = unsigned(ymd.month());
|
result.tm_mon = unsigned(ymd.month()) - 1u; // Zero-based!
|
||||||
result.tm_year = int(ymd.year()) - 1900;
|
result.tm_year = int(ymd.year()) - 1900;
|
||||||
result.tm_wday = unsigned(weekday);
|
result.tm_wday = unsigned(weekday);
|
||||||
result.tm_yday = daysSinceJan1.count();
|
result.tm_yday = daysSinceJan1.count();
|
||||||
|
Reference in New Issue
Block a user