"All DATEs are kept as an integer in the background"
If you are referring to other technologies, then maybe. But Oracle dates are not stored like this.
Oracle dates are 7 bytes:
century
year
month
day
hour
min
second
and they are offset to avoid zeros, ie, we use an internal format to represent that information, so it is not really storing 20, 05, 06, 25, 12, 01, 00 for June 25, 2005, at 12:01:00. Using the built-in DUMP function, we can see what Oracle really stores:
SQL> create table t ( x date );
Table created.
SQL> insert into t (x) values
2 ( to_date( '25-jun-2005 12:01:00',
3 'dd-mon-yyyy hh24:mi:ss' ) );
1 row created.
SQL> select x, dump(x,10) d from t;
X D
--------- -----------------------------------
25-JUN-05 Typ=12 Len=7: 120,105,6,25,13,2,1
The century and year bytes (the 120,105 in the DUMP output) are stored in an excess-100 notation. You would have to subtract 100 from them to determine the correct century and year. The reason for the excess-100 notation is support of BC and AD dates.