OK. So it' timestamp with TZ, and when you select from the db using psql, you see the correct time? Postgres is translating back and forth between the time zone configured on the server on which it is running and UTC. So if that server is at UTC-400, then the values stored can appear to be 4 hours ahead if they're not correctly offset to local time or formatted correctly. (I wanted confirmation from you about that, because although I suspected you just needed to get a value from UTC into the local timezone, I've seen cases where things were configured such that there were multiple fubar's relating to timezone handling, with the timestamps stored incorrectly, and multiple offsets, so that just adding an offset from UTC to local might appear to be a fix, but would in fact just be one more offset piled on top of others that were incorrect.)
So, first puts mytimestamp.inspect, just to make 100% sure what RoR sees as the underlying value. My working theory is that it's the correct moment in time, but UTC.
Then, assuming that *is* actually the case:
<
http://api.rubyonrails.org/v4.1.1/classes/ActiveSupport/TimeWithZone.html>
And note that in /config/application.rb you can set the default time zone to something other than UTC:
config.time_zone = 'Central Time (US & Canada)'
(Use ActiveSupport::TimeZone.zones_map to get a list of available time zones.)
The config options is useful for in-house type of application where all users can reasonably be assumed to be in the same time zone (or at least, want to view all times in the same time zone). For an app which will be used across time zones, you'd have to track preferred time zones by user, develop some helper methods or filters or whatever to use the custom time zones per user, and even worse, potentially display timestamps based on criteria beyond just the user's time zone...