TL;DR
Use UTC for all storage and calculations. Convert to/from local format only for User Experience (which <chrono> is perfectly fine for but which was quite possible before already). Be aware of the possible traps.
Your question is conflating two disjunct topics:
Sticking to UTC for all backend storage, logging, and internal logic is widely considered the gold standard in software engineering. You only convert to local time zones or offsets when strictly necessary for human input or display.
I strongly support this notion.
Date formatting differs by locale, sometimes ambigously so. 2/7/2026 could be June, or February. The year 1440 might be medieval, or current, depending on locale (and / or context). Basically the only immediately recognizable, unambiguous format here is YYYY-MM-DD. It is also naively sortable. Any other formatting would require the accompanying information of the locale active at the time of writing. That locale would then also be employed upon reading. As soon as clients might use your software under different locales, that can get ugly fast.
Locale identifiers are platform-dependent. en_US, en-US, 0x0409, or en_US.UTF-8? And what the heck is th-TH-u-ca-gregory? Is your non-UTC date handling logic up to handling each of those correctly? Are you aware that this is only the overall locale, and that the date locale of any given environment can be different from e.g. the message locale?
Time zone identifiers are ambiguous. If you think ahead and tag your timestamps with time zone identifiers, you need to be aware that for example 'CST' refers to four distinct time zones: China Standard Time, Cuba Standard Time, and two different versions of Central Standard Time (one in America, one in Australia). So your timestamps still aren't unambiguous.
That's just the usual highlight list. I could go into the proper handling of jump seconds next, i.e. when a minute has more or less than 60 seconds (which happens more often than you probably think).
The last point gets all this into sharp perspective though:
The next guy working with your timestamps might be unfamiliar with your locale. Think having some offshore freelancer looking for some specific bug, comparing database entries with logged error messages. He knows his UTC offset (hopefully). He can get your UTC offset easily enough. Knowing when exactly your timezone switches to DST and back, and whether your timestamps are properly tagged DST or not*, can easily throw off things.
UTC timestamps are universal, unambiguous, and precise. Use them for everything that is not customer-facing.
Compare:
7.6.26, 09:54 MET
"What is MET? Is that July 6th, or June 7th? Wait, that's in the summer, shouldn't that be MEST? Is that morning, or afternoon?"
2026-06-07 07:54 +0200
That's June 7th, shortly before 10 o'clock in the morning locally, 8 o'clock UTC.
Is this still true in (C++20 and later)? If not, how does enable manipulation of and computation within time zones, and what is a concrete example of when this is useful?
We had workable manipulation and computation of time zones all the way back in C! This is a completely different issue though. This is about how to turn those unambiguous UTC timestamps into local timestamps for client-facing code (if that is your decision -- if your application is about precision, a UTC timestamp might be well appreciated even by the customer).
The hard part is understanding your domain well enough to know which tool is right for the job.problem here is not with chrono, but general understanding of how timezones work and how to design approach, I'd suggest to move to softwareengineering.stackexchange.com<chrono>which in turn has overturned the dogma stated in the question. The dogma is likely still good advice if you're not programming in C++. Try this in C and the compiler will not help you correct minor type-o's and think-o's. And if you happen to get it right, the code will be far less maintainable. It will be hard to read, and the type system won't help you detect minor mistakes in future maintenance.java.time(2014) have the same concepts (local/zoned/etc) in their design, type safety, but none of them (including your example with chrono) are error resistant, they do no help correct minor typos/thinkos, like if you forget to useget_sys_time, I'd also challengedogmastatement, while I can imagine that some people could say that, it is nowhere near "dogma", utc is great for exact points in time (like past ornow), but "everyday 7:00" is not point in time, so you just cannot use utc for this, you have to "generate local time", and then use it one way or another