diff --git a/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php b/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
index b197f17f60..e802b82daa 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/FormatDate.php
@@ -15,7 +15,9 @@
  * - from_format: The source format string as accepted by
  *   @link http://php.net/manual/datetime.createfromformat.php \DateTime::createFromFormat. @endlink
  * - to_format: The destination format.
- * - timezone: String identifying the required time zone, see
+ * - timezone: String identifying the required source time zone, see
+ *   DateTimePlus::__construct().
+ * - to_timezone: String identifying the required destination time zone, see
  *   DateTimePlus::__construct().
  * - settings: keyed array of settings, see DateTimePlus::__construct().
  *
@@ -55,6 +57,7 @@
  *     from_format: 'Y-m-d\TH:i:sO'
  *     to_format: 'Y-m-d\TH:i:s'
  *     timezone: 'America/Managua'
+ *     to_timezone: 'UTC'
  *     settings:
  *       validate_format: false
  *     source: event_time
@@ -91,14 +94,15 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
 
     $fromFormat = $this->configuration['from_format'];
     $toFormat = $this->configuration['to_format'];
-    $timezone = isset($this->configuration['timezone']) ? $this->configuration['timezone'] : NULL;
+    $from_timezone = isset($this->configuration['timezone']) ? $this->configuration['timezone'] : NULL;
+    $to_timezone = isset($this->configuration['to_timezone']) ? $this->configuration['to_timezone'] : $from_timezone;
     $settings = isset($this->configuration['settings']) ? $this->configuration['settings'] : [];
 
     // Attempts to transform the supplied date using the defined input format.
     // DateTimePlus::createFromFormat can throw exceptions, so we need to
     // explicitly check for problems.
     try {
-      $transformed = DateTimePlus::createFromFormat($fromFormat, $value, $timezone, $settings)->format($toFormat);
+      $transformed = DateTimePlus::createFromFormat($fromFormat, $value, $from_timezone, $settings)->format($toFormat, ['timezone' => $to_timezone]);
     }
     catch (\InvalidArgumentException $e) {
       throw new MigrateException(sprintf('Format date plugin could not transform "%s" using the format "%s". Error: %s', $value, $fromFormat, $e->getMessage()), $e->getCode(), $e);
diff --git a/core/modules/migrate/tests/src/Unit/process/FormatDateTest.php b/core/modules/migrate/tests/src/Unit/process/FormatDateTest.php
index c1e0c631bd..ce189671ae 100644
--- a/core/modules/migrate/tests/src/Unit/process/FormatDateTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/FormatDateTest.php
@@ -111,12 +111,13 @@ public function datesDataProvider() {
       ],
       'timezone' => [
         'configuration' => [
-          'from_format' => 'Y-m-d\TH:i:sO',
-          'to_format' => 'Y-m-d\TH:i:s',
+          'from_format' => 'Y-m-d h:i:s',
+          'to_format' => 'Y-m-d h:i:s',
           'timezone' => 'America/Managua',
+          'to_timezone' => 'UTC',
         ],
-        'value' => '2004-12-19T10:19:42-0600',
-        'expected' => '2004-12-19T10:19:42',
+        'value' => '2004-12-19 10:19:42',
+        'expected' => '2004-12-19 04:19:42',
       ],
     ];
   }
