Index: src/wp-includes/class-wp-xmlrpc-server.php
===================================================================
--- src/wp-includes/class-wp-xmlrpc-server.php	(revision 35898)
+++ src/wp-includes/class-wp-xmlrpc-server.php	(working copy)
@@ -4984,14 +4984,16 @@
 		}
 
 		// Do some timestamp voodoo
-		if ( !empty( $content_struct['date_created_gmt'] ) )
+		if ( !empty( $content_struct['date_created_gmt'] ) ) {
 			// We know this is supposed to be GMT, so we're going to slap that Z on there by force
-			$dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z';
-		elseif ( !empty( $content_struct['dateCreated']) )
-			$dateCreated = $content_struct['dateCreated']->getIso();
+			$dateCreated = iso8601_to_datetime( rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z' );
+			$dateCreated = get_date_from_gmt( $dateCreated );
+		} elseif ( !empty( $content_struct['dateCreated']) ) {
+			$dateCreated = iso8601_to_datetime( $content_struct['dateCreated']->getIso() );
+		}
 
 		if ( !empty( $dateCreated ) ) {
-			$post_date = iso8601_to_datetime( $dateCreated );
+			$post_date = $dateCreated;
 			$post_date_gmt = get_gmt_from_date( $post_date );
 		} else {
 			$post_date = '';
@@ -5337,15 +5339,17 @@
 				$to_ping = implode(' ', $to_ping);
 		}
 
-		// Do some timestamp voodoo.
-		if ( !empty( $content_struct['date_created_gmt'] ) )
-			// We know this is supposed to be GMT, so we're going to slap that Z on there by force.
-			$dateCreated = rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z';
-		elseif ( !empty( $content_struct['dateCreated']) )
-			$dateCreated = $content_struct['dateCreated']->getIso();
+		// Do some timestamp voodoo
+		if ( !empty( $content_struct['date_created_gmt'] ) ) {
+			// We know this is supposed to be GMT, so we're going to slap that Z on there by force
+			$dateCreated = iso8601_to_datetime( rtrim( $content_struct['date_created_gmt']->getIso(), 'Z' ) . 'Z' );
+			$dateCreated = get_date_from_gmt( $dateCreated );
+		} elseif ( !empty( $content_struct['dateCreated']) ) {
+			$dateCreated = iso8601_to_datetime( $content_struct['dateCreated']->getIso() );
+		}
 
 		if ( !empty( $dateCreated ) ) {
-			$post_date = iso8601_to_datetime( $dateCreated );
+			$post_date = $dateCreated;
 			$post_date_gmt = get_gmt_from_date( $post_date, 'GMT' );
 		} else {
 			$post_date     = $postdata['post_date'];
Index: tests/phpunit/tests/xmlrpc/mw/editPost.php
===================================================================
--- tests/phpunit/tests/xmlrpc/mw/editPost.php	(revision 35898)
+++ tests/phpunit/tests/xmlrpc/mw/editPost.php	(working copy)
@@ -246,6 +246,35 @@
 	}
 
 	/**
+	 * @ticket 
+	 */
+	function test_post_date_gmt_timezone_conversion() {
+		$tz = get_option( 'timezone_string' );
+		update_option( 'timezone_string', 'America/New_York' );
+
+		$editor_id = $this->make_user_by_role( 'editor' );
+
+		$post_id = self::factory()->post->create( array(
+			'post_author' => $editor_id
+		) );
+
+		$date_string = '1984-01-11 05:00:00';
+		// America/New_York's time zone is -5:00 so add 5 hours
+		$date_string_gmt = '1984-01-11 10:00:00';
+
+		$result = $this->myxmlrpcserver->mw_editPost( array( $post_id, 'editor', 'editor', array(
+			'date_created_gmt' => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $date_string_gmt, false ) ),
+		) ) );
+
+		$fetched_post = get_post( $post_id );
+
+		update_option( 'timezone_string', $tz );
+
+		$this->assertTrue( $result );
+		$this->assertEquals( $date_string, $fetched_post->post_date );
+	}
+
+	/**
 	 * @ticket 16980
 	 */
 	function test_empty_not_null() {
Index: tests/phpunit/tests/xmlrpc/mw/newPost.php
===================================================================
--- tests/phpunit/tests/xmlrpc/mw/newPost.php	(revision 35898)
+++ tests/phpunit/tests/xmlrpc/mw/newPost.php	(working copy)
@@ -193,4 +193,30 @@
 		$this->assertStringMatchesFormat( '%d', $result );
 		$this->assertEquals( $date_string , $fetched_post->post_date );
 	}
+	
+	/**
+	 * @ticket 
+	 */
+	function test_post_date_gmt_timezone_conversion() {
+		$tz = get_option( 'timezone_string' );
+		update_option( 'timezone_string', 'America/New_York' );
+
+		$this->make_user_by_role( 'editor' );
+		$date_string = '1984-01-11 05:00:00';
+		// America/New_York's time zone is -5:00 so add 5 hours
+		$date_string_gmt = '1984-01-11 10:00:00';
+		$post = array(
+			'title' => 'test',
+			'post_content' => 'test',
+			'date_created_gmt' => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $date_string_gmt, false ) )
+		);
+		$result = $this->myxmlrpcserver->mw_newPost( array( 1, 'editor', 'editor', $post ) );
+		$fetched_post = get_post( $result );
+
+		update_option( 'timezone_string', $tz );
+
+		$this->assertStringMatchesFormat( '%d', $result );
+		$this->assertEquals( $date_string , $fetched_post->post_date );
+	}
+
 }
