While {:%Q} could work, it is extracting the internal count() from a duration, which is dangerous and usually unnecessary with std::chrono types. If a code change alters the duration's period, you will start getting incorrect values.
The following will work regardless of the internal representation of your duration.
The code is also smaller and arguably clearer.
auto duration = tp2 - tp1;
std::println("duration: {} year(s)", duration / years{1});
The lesson: dividing two durations gives you a correct count without needing to know (or duration_cast) either duration's representation.