If I understood the question correctly I think there might be some confusion...
Indeed internally Ensemble stores the Message Header times (TimeCreated & TimeProcessed) in a UTC time (per the considerations Robert mentioned) but when these times are displayed in the Message Viewer they go through conversion and are displayed in local time.
So if you would open the object via code, or run an SQL query directly, you would be dependent on running the relevant LogicalToDisplay() or LogicalToOdbc() methods for objects, or using the ODBC or Display runtime modes, but on the default Message Viewer web page these times should appear local.
You can examine this by doing a simple select on the Message Header table and you can see the difference between the Logical and Display modes.
For example, for a certain message, the Logical (internal UTC) time is 10:42 -
And now the same time using Display mode, the time is 13:42 -
And compare this with what you see in the Message Viewer, you see 13:42 -
Note if you take a look at the Ens.DataType.UTC data-type class you can see it's conversion methods.
For example the LogicalToDisplay() method.
Here's an example of what it looks like when it's code runs.
In the following code I show my current local time (using $H, taking into account Time Zone and Daylight Saving), then I show the current general time (using $ZTS, per GMT and no Daylight Saving), and then applying the code run by the method, calling the method, and explicitly.
TEST>set currentLocalTime = $ZDateTime($Horolog,3,,3)
TEST>set currentGeneralTime = $ZDateTime($ZTimeStamp,3,,3)
See the -3 argument in the $ZDTH function call, from the docs this does the following -
$ZDATETIMEH takes a datetime value specified in $ZTIMESTAMP internal format, converts that value from UTC Universal time to local time, and returns the resulting value in the same internal format