In Remedy, form CFG:Time Zone stores current offset of local time from UTC in Actual Time Zone Offset and current offset of local time from server's local time in Server Time Zone Offset; both are counted in seconds, and are not necessarily striclty current -- update is triggered by escalation CFG:TZO:UpdateOffsets which runs once a day (e. g. at 2:05 AM). As long as timestamps you're fetching are from period synchronized with current offsets, you should be able to dynamically adjust them during transaction.
TSO will always extract the timestamps from Remedy as stored in the Remedy server time zone, as you have found.
To change this you need to use the Java time conversions:
There is also a workflow in the Utilities module to do this if you don't want to use a XPath Transform where you pass in the value and the format string that you want the value to be converted too.