@@ -291,44 +291,32 @@ void PrintValue(std::ostream &os, const mg_local_date_time *local_date_time) {
291291 PrintValue (os, time);
292292}
293293
294- void PrintValue (std::ostream &os, const mg_date_time *date_time ) {
294+ void PrintDateTimeComponents (std::ostream &os, int64_t seconds, int64_t nanoseconds ) {
295295 namespace chrono = std::chrono;
296- auto const seconds = chrono::seconds (mg_date_time_seconds (date_time) );
297- auto const days = chrono::duration_cast<date::days>(seconds );
296+ auto const secs = chrono::seconds (seconds );
297+ auto const days = chrono::duration_cast<date::days>(secs );
298298 auto const date = mg_date_make (days.count ());
299299
300- auto const nanoseconds =
301- chrono::duration_cast<chrono::nanoseconds>(seconds ) - chrono::duration_cast<chrono::nanoseconds>(days);
302- auto const time = mg_local_time_make (nanoseconds .count () + mg_date_time_nanoseconds (date_time) );
300+ auto const nanos =
301+ chrono::duration_cast<chrono::nanoseconds>(secs ) - chrono::duration_cast<chrono::nanoseconds>(days);
302+ auto const time = mg_local_time_make (nanos .count () + nanoseconds );
303303
304304 PrintValue (os, date);
305305 os << " " ;
306306 PrintValue (os, time);
307+ }
308+
309+ void PrintValue (std::ostream &os, const mg_date_time *date_time) {
310+ PrintDateTimeComponents (os, mg_date_time_seconds (date_time), mg_date_time_nanoseconds (date_time));
307311 auto const minutes = mg_date_time_tz_offset_minutes (date_time);
308312 os << (minutes >= 0 ? ' +' : ' -' ) << std::setfill (' 0' ) << std::setw (2 ) << (std::abs (minutes) / 60 ) << " :"
309313 << std::setfill (' 0' ) << std::setw (2 ) << (std::abs (minutes) % 60 );
310314}
311315
312316void PrintValue (std::ostream &os, const mg_date_time_zone_id *date_time_zone_id) {
313- namespace chrono = std::chrono;
314-
315- int64_t raw_seconds = mg_date_time_zone_id_seconds (date_time_zone_id);
316- int64_t raw_nanos = mg_date_time_zone_id_nanoseconds (date_time_zone_id);
317- const mg_string *timezone_name = mg_date_time_zone_id_timezone_name (date_time_zone_id);
318-
319- auto const seconds = chrono::seconds (raw_seconds);
320- auto const days = chrono::duration_cast<date::days>(seconds);
321- auto const date = mg_date_make (days.count ());
322-
323- auto const nanoseconds =
324- chrono::duration_cast<chrono::nanoseconds>(seconds) - chrono::duration_cast<chrono::nanoseconds>(days);
325- auto const time = mg_local_time_make (nanoseconds.count () + raw_nanos);
326-
327- PrintValue (os, date);
328- os << " " ;
329- PrintValue (os, time);
317+ PrintDateTimeComponents (os, mg_date_time_zone_id_seconds (date_time_zone_id), mg_date_time_zone_id_nanoseconds (date_time_zone_id));
330318 os << " [" ;
331- PrintStringUnescaped (os, timezone_name );
319+ PrintStringUnescaped (os, mg_date_time_zone_id_timezone_name (date_time_zone_id) );
332320 os << " ]" ;
333321}
334322
0 commit comments