This seems like a simple task that software accomplishes all the time, but I haven't found a reliable way to do it.
There is the
DateTimeOriginal EXIF tag, but that is in local time. And it seems there is no standard EXIF tag for the time zone, per this question:
Is there any hope for Exif TimeZoneOffset as a standard?
The top answer there suggests looking in the XMP metadata instead, but that doesn't seem to work either. I have examples from the stock Android 4.4 camera which include literally 3 XMP values (none of them about time).
Then, there is the EXIF GPS timestamp, which is thankfully in UTC. However, as established here, the GPS timestamp is for when the GPS location fix was obtained. I have an example of a photo I took after an international flight where the last GPS fix was before the flight, in another country, hours and thousands of miles away.
I'm trying to write an application that can take any photo with metadata and place it on a timeline, so I need a general way to do this. I know software and websites do this all the time, so it seems there must be a way, right? Or do they just have teams doing research on every make and model of camera and phone, discovering their idiosyncratic way of recording time?