The DATE data type does not handle time zones or changes in daylight savings time.
Either:
TIMESTAMP WITH TIME ZONE data type; orA DATE can be stored as Coordinated Universal Time (UTC) and converted to the current session time zone like this:
SELECT FROM_TZ(
         CAST(
           TO_DATE( '2016-01-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS' )
           AS TIMESTAMP
         ),
         'UTC'
       )
       AT LOCAL AS time
FROM   DUAL;
If you run ALTER SESSION SET TIME_ZONE = '+01:00'; then the output is:
TIME
------------------------------------
2016-01-01 13:00:00.000000000 +01:00
and ALTER SESSION SET TIME_ZONE = 'PST'; then the output is:
TIME
------------------------------------
2016-01-01 04:00:00.000000000 PST