If absolute timing is your primary concern, it's probably best to work off of UTC as it exists for that purpose. Michael's answer is very useful for when you have to work inside of the problem, but it's usually a good idea to avoid it entirely where you can.
When your system isn't set to UTC by default, the simplest way to pass the timezone in is by prefixing your command with the TZ
environment variable. This limits the zone switch to a single command and keeps the variable from leaking into your subsequent commands.
$ NOW=$(date '+%s')
$ date -d @$NOW
Wed Jun 11 23:44:35 EDT 2014
$ TZ=UTC date -d @$NOW
Thu Jun 12 03:44:35 UTC 2014
What you shouldn't do is export the TZ
variable as this can make things very confusing to troubleshoot, as the following demonstrates.
$ export TZ=UTC
$ date -d @$NOW
Thu Jun 12 03:44:35 UTC 2014
$ TZ=EDT date -d @$NOW
Thu Jun 12 03:44:35 EDT 2014