Index: wp-includes/functions.php
===================================================================
--- wp-includes/functions.php	(revision 12596)
+++ wp-includes/functions.php	(working copy)
@@ -59,13 +59,26 @@
  * @return int|string String if $type is 'gmt', int if $type is 'timestamp'.
  */
 function current_time( $type, $gmt = 0 ) {
-	switch ( $type ) {
-		case 'mysql':
-			return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * 3600 ) ) );
-			break;
-		case 'timestamp':
-			return ( $gmt ) ? time() : time() + ( get_option( 'gmt_offset' ) * 3600 );
-			break;
+	if ( function_exists('date_default_timezone_set') ) {
+		// Use the PHP5 DateTime support. The timezone is already correctly set.
+		switch ( $type ) {
+			case 'mysql':
+				return ( $gmt ) ? gmdate( 'Y-m-d H:i:s' ) : date( 'Y-m-d H:i:s' );
+				break;
+			case 'timestamp':
+				return ( $gmt ) ? gmdate('U') : time();
+				break;
+		}
+	} else {
+		// No PHP5 DateTime support. Add in gmt_offset.
+		switch ( $type ) {
+			case 'mysql':
+				return ( $gmt ) ? gmdate( 'Y-m-d H:i:s') : gmdate( 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * 3600 ) ) );
+				break;
+			case 'timestamp':
+				return ( $gmt ) ? time() : ( time() + ( get_option( 'gmt_offset' ) * 3600 ) );
+				break;
+		}
 	}
 }
 
Index: wp-settings.php
===================================================================
--- wp-settings.php	(revision 12596)
+++ wp-settings.php	(working copy)
@@ -18,9 +18,6 @@
 set_magic_quotes_runtime(0);
 @ini_set('magic_quotes_sybase', 0);
 
-if ( function_exists('date_default_timezone_set') )
-	date_default_timezone_set('UTC');
-
 /**
  * Turn register globals off.
  *
@@ -719,6 +716,14 @@
 // Load in support for template functions which the theme supports
 require_if_theme_supports( 'post-thumbnails', ABSPATH . WPINC . '/post-thumbnail-template.php' );
 
+// Set the timezone
+if ( function_exists('date_default_timezone_set') ) {
+	if ( $timezone_string = get_option( 'timezone_string' ) )
+		@date_default_timezone_set( $timezone_string );
+	else
+		@date_default_timezone_set(ini_get('date.timezone') ? ini_get('date.timezone') : 'UTC');
+}
+
 /**
  * Runs just before PHP shuts down execution.
  *
