Index: wp-includes/post-template.php
===================================================================
--- wp-includes/post-template.php	(revision 12598)
+++ wp-includes/post-template.php	(working copy)
@@ -1210,7 +1210,7 @@
 	/* translators: 1: date */
 	$currentf  = __( '%1$s [Current Revision]' );
 
-	$date = date_i18n( $datef, strtotime( $revision->post_modified_gmt . ' +0000' ) );
+	$date = date_i18n( $datef, strtotime( $revision->post_modified ) );
 	if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) )
 		$date = "<a href='$link'>$date</a>";
 
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;
+		}
 	}
 }
 
@@ -91,17 +104,18 @@
 		if ( ! $gmt )
 			$i = current_time( 'timestamp' );
 		else
-			$i = time();
+			$i = current_time( 'timestamp', true );
 		// we should not let date() interfere with our
 		// specially computed timestamp
-		$gmt = true;
+		if ( !function_exists('date_default_timezone_set') )
+			$gmt = true;
 	}
 
 	// store original value for language with untypical grammars
 	// see http://core.trac.wordpress.org/ticket/9396
 	$req_format = $dateformatstring;
 
-	$datefunc = $gmt? 'gmdate' : 'date';
+	$datefunc = $gmt ? 'gmdate' : 'date';
 
 	if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) {
 		$datemonth = $wp_locale->get_month( $datefunc( 'm', $i ) );
@@ -127,6 +141,22 @@
 }
 
 /**
+ * WP wrapper for date() that hides differences between PHP4 and PHP 5 date and time support.
+ *
+ * @since 3.0
+ *
+ * @param string $format Format to display the date.
+ * @param int $timestamp Optional. Unix timestamp.
+ * @return string The formatted date
+ */
+function compat_date($format, $timestamp = false) {
+	if ( function_exists('date_default_timezone_set') )
+		return date($format, $timestamp);
+	else
+		return gmdate($format, $timestamp);
+}
+
+/**
  * Convert number to format based on the locale.
  *
  * @since 2.3.0
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.
  *
Index: wp-admin/includes/meta-boxes.php
===================================================================
--- wp-admin/includes/meta-boxes.php	(revision 12597)
+++ wp-admin/includes/meta-boxes.php	(working copy)
@@ -165,7 +165,8 @@
 	$date = date_i18n( $datef, strtotime( $post->post_date ) );
 } else { // draft (no saves, and thus no date specified)
 	$stamp = __('Publish <b>immediately</b>');
-	$date = date_i18n( $datef, strtotime( current_time('mysql') ) );
+	$date = date_i18n( $datef, current_time('timestamp') );
+	error_log($date);
 }
 
 if ( $can_publish ) : // Contributors don't get to choose the date of publish ?>
Index: wp-admin/includes/template.php
===================================================================
--- wp-admin/includes/template.php	(revision 12597)
+++ wp-admin/includes/template.php	(working copy)
@@ -2612,18 +2612,18 @@
 
 	$time_adj = current_time('timestamp');
 	$post_date = ($for_post) ? $post->post_date : $comment->comment_date;
-	$jj = ($edit) ? mysql2date( 'd', $post_date, false ) : gmdate( 'd', $time_adj );
-	$mm = ($edit) ? mysql2date( 'm', $post_date, false ) : gmdate( 'm', $time_adj );
-	$aa = ($edit) ? mysql2date( 'Y', $post_date, false ) : gmdate( 'Y', $time_adj );
-	$hh = ($edit) ? mysql2date( 'H', $post_date, false ) : gmdate( 'H', $time_adj );
-	$mn = ($edit) ? mysql2date( 'i', $post_date, false ) : gmdate( 'i', $time_adj );
-	$ss = ($edit) ? mysql2date( 's', $post_date, false ) : gmdate( 's', $time_adj );
+	$jj = ($edit) ? mysql2date( 'd', $post_date, false ) : compat_date( 'd', $time_adj );
+	$mm = ($edit) ? mysql2date( 'm', $post_date, false ) : compat_date( 'm', $time_adj );
+	$aa = ($edit) ? mysql2date( 'Y', $post_date, false ) : compat_date( 'Y', $time_adj );
+	$hh = ($edit) ? mysql2date( 'H', $post_date, false ) : compat_date( 'H', $time_adj );
+	$mn = ($edit) ? mysql2date( 'i', $post_date, false ) : compat_date( 'i', $time_adj );
+	$ss = ($edit) ? mysql2date( 's', $post_date, false ) : compat_date( 's', $time_adj );
 
-	$cur_jj = gmdate( 'd', $time_adj );
-	$cur_mm = gmdate( 'm', $time_adj );
-	$cur_aa = gmdate( 'Y', $time_adj );
-	$cur_hh = gmdate( 'H', $time_adj );
-	$cur_mn = gmdate( 'i', $time_adj );
+	$cur_jj = compat_date( 'd', $time_adj );
+	$cur_mm = compat_date( 'm', $time_adj );
+	$cur_aa = compat_date( 'Y', $time_adj );
+	$cur_hh = compat_date( 'H', $time_adj );
+	$cur_mn = compat_date( 'i', $time_adj );
 
 	$month = "<select " . ( $multi ? '' : 'id="mm" ' ) . "name=\"mm\"$tab_index_attribute>\n";
 	for ( $i = 1; $i < 13; $i = $i +1 ) {
