The question was more geared towards what the best practices around storing references to the date/times provided by the MLS and not on how to instantiate a DateTime object w/ a timezone as that is trivial.
In short: I've just started converting and storing all references to the date/times fetched from the feed in UTC. I've also started to only query the feed using UTC so I don't have to constantly shift between multiple timezones.
TLDR:
My server runs in UTC. The RETS feed I am pulling from yields date/time strings like "2020-04-22 15:20:25". So, if I were to do new \DateTime("2020-04-22 15:20:25"), I would get that date interpreted in UTC and not the feed's local time which is either "-07:00" or "-08:00" depending on the time of year.
What I have begun doing is grabbing the date/time string and setting the timezone offset if one exists in the RETS metadata. If none is provided, I assume it is given in UTC. My current implementation for date/time strings fetched from RETS is similar to:
// Instantiate date in RETS local timezone, if provided. Fallback to server time (UTC)
$dateTime = null !== $timeZoneOffset
? new \DateTime($timestamp, new \DateTimeZone($timeZoneOffset))
: new \DateTime($timestamp);
// Convert instantiated date to UTC
$dateTime->setTimezone(new \DateTimeZone('UTC'));
// Store locally...