Then eventually you give up on all that and try to focus on building a datetime library that works the way you want it to.
Yup, done that one too. Ended up falling back on using the Linux zoneinfo database and accepting that I'm unlikely to do better (and keep up with it, no less).
I would _highly_ recommend never to do this. Date/time is complex in so many subtle ways, least of which is staying up to date on changes. Because its so fundamental every language is likely to have a mature, maintained, and roughly canonical library to use.
Even when those four types are sufficient, you'll frequently find there are better ways to handle storage and transmission than serializing the data to JSON.