Oracle Linux 6.1 using MySQL 5.5.20 (note both US and Australian eastern timezones are called EST): mysql> SHOW VARIABLES LIKE '%time%'; +-------------------------------+-------------------+ | Variable_name | Value | +-------------------------------+-------------------+ | connect_timeout | 10 | | datetime_format | %Y-%m-%d %H:%i:%s | | delayed_insert_timeout | 300 | | flush_time | 0 | | innodb_lock_wait_timeout | 50 | | innodb_old_blocks_time | 1000 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lc_time_names | en_US | | lock_wait_timeout | 31536000 | | long_query_time | 10.000000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | slave_net_timeout | 3600 | | slow_launch_time | 2 | | system_time_zone | EST | | thread_pool_prio_kickup_timer | 1000 | | time_format | %H:%i:%s | | time_zone | SYSTEM | | timed_mutexes | OFF | | timestamp | 1326931003 | | wait_timeout | 28800 | +-------------------------------+-------------------+ 22 rows in set (0.01 sec) -- Original test: mysql> SET @TIME=1257055140; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1257055140 | 2009-11-01 01:59:00 | 1257058740 | 3600 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) -- Original test: Try one day earlier mysql> SET @TIME=1257055140 - 86400; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1256968740 | 2009-10-31 01:59:00 | 1256968740 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) -- 1 hour earlier: mysql> SET @TIME=1257055140 - 3600; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1257051540 | 2009-11-01 00:59:00 | 1257051540 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) -- 1 minute later: mysql> SET @TIME=1257055140 + 60; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1257055200 | 2009-11-01 01:00:00 | 1257055200 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) -- Try the equivalent time compared to end of daylight savings in 2011: mysql> SET @TIME=1320562740; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1320562740 | 2011-11-06 01:59:00 | 1320562740 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) Trying the Australia/Sydney timezone: mysql> SHOW VARIABLES LIKE '%time%'; +-------------------------------+-------------------+ | Variable_name | Value | +-------------------------------+-------------------+ | connect_timeout | 10 | | datetime_format | %Y-%m-%d %H:%i:%s | | delayed_insert_timeout | 300 | | flush_time | 0 | | innodb_lock_wait_timeout | 50 | | innodb_old_blocks_time | 1000 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lc_time_names | en_US | | lock_wait_timeout | 31536000 | | long_query_time | 10.000000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | slave_net_timeout | 3600 | | slow_launch_time | 2 | | system_time_zone | EST | | thread_pool_prio_kickup_timer | 1000 | | time_format | %H:%i:%s | | time_zone | SYSTEM | | timed_mutexes | OFF | | timestamp | 1326932369 | | wait_timeout | 28800 | +-------------------------------+-------------------+ 22 rows in set (0.00 sec) -- Original timestamp: mysql> SET @TIME=1257055140; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1257055140 | 2009-11-01 16:59:00 | 1257055140 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) -- Start of daylight savings in 2009: mysql> SELECT UNIX_TIMESTAMP('2009-10-04 01:59:00'); +---------------------------------------+ | UNIX_TIMESTAMP('2009-10-04 01:59:00') | +---------------------------------------+ | 1254585540 | +---------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1257055140 | 2009-11-01 16:59:00 | 1257055140 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT UNIX_TIMESTAMP('2009-10-04 01:59:00') - 3600; +----------------------------------------------+ | UNIX_TIMESTAMP('2009-10-04 01:59:00') - 3600 | +----------------------------------------------+ | 1254581940 | +----------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1257055140 | 2009-11-01 16:59:00 | 1257055140 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) -- End of daylight savings in 2009: mysql> SELECT UNIX_TIMESTAMP('2009-04-05 01:59:00'); +---------------------------------------+ | UNIX_TIMESTAMP('2009-04-05 01:59:00') | +---------------------------------------+ | 1238857140 | +---------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1257055140 | 2009-11-01 16:59:00 | 1257055140 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT UNIX_TIMESTAMP('2009-04-05 01:59:00') + 3600; +----------------------------------------------+ | UNIX_TIMESTAMP('2009-04-05 01:59:00') + 3600 | +----------------------------------------------+ | 1238860740 | +----------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT @TIME, FROM_UNIXTIME(@TIME), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)), UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME; +------------+----------------------+--------------------------------------+--------------------------------------------+ | @TIME | FROM_UNIXTIME(@TIME) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME)) | UNIX_TIMESTAMP(FROM_UNIXTIME(@TIME))-@TIME | +------------+----------------------+--------------------------------------+--------------------------------------------+ | 1257055140 | 2009-11-01 16:59:00 | 1257055140 | 0 | +------------+----------------------+--------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) So looks like an issue with end of daylight savings in 2009 for the US EST timezone.