https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118811
--- Comment #16 from Nicholas Williams <nicholas at nicholaswilliams dot net> --- (In reply to Jonathan Wakely from comment #13) > Unrelated to the lifetime bug, but why not just use utc_clock here? > > auto timestamp( std::chrono::duration_cast< std::chrono::nanoseconds >( > std::chrono::system_clock::now().time_since_epoch() ) ); > std::chrono::zoned_time zt( > "UTC", > std::chrono::time_point_cast< std::chrono::microseconds >( > std::chrono::sys_time< std::chrono::nanoseconds >( timestamp ) ) ); > return std::format( "{:%Y-%m-%dT%TZ}", zt ); > > > Why not simply: > > auto ut = std::chrono::utc_clock::now(); > auto mut = std::chrono::time_point_cast<std::chrono::microseconds>(ut); > return std::format( "{:%Y-%m-%dT%TZ}", mut ); > > ? Our exact use case is quite a bit more complicated than this. We don't have a simplistic timestamp() method that does what the one in this example does. Log events at creation are assigned a timestamp in nanoseconds based on our pluggable time provider API (which just so happens to default to std::chrono::system_clock::now().time_since_epoch()), and then perhaps many seconds later at flush time those nanosecond timestamps are formatted into the readable timestamp.