As it happens Mage overrides the timezone set in PHP and forces it to UTC in app/Mage.php
. This is intended so that everything written to the DB is in UTC. The problem comes when the localization does not take into account the timezones of the places it talks about.
The work around to display all times in your store's timezone is to go into the getTracking method of core/Mage/Usa/Model/Shipping/Fedex.php
, although this should work for anything that implements Mage_Shipping_Model_Carrier_Interface.
and replace
$this->_getXMLTracking($tracking);
With
$og_tz = date_default_timezone_get();
$store_tz = Mage::getStoreConfig('general/locale/timezone');
date_default_timezone_set($store_tz);
$this->_getXMLTracking($tracking);
date_default_timezone_set($og_tz);
This will display the time in the store's timezone, which will not be exactly the same as the Fedex's tracking page, which by default displays times local to each stop.
I should mention that these changes should be in the app/code/local repository to preserve some upgradeability.
Hope someone finds this useful.