Index: lib/ezlocale/classes/ezlocale.php
===================================================================
--- lib/ezlocale/classes/ezlocale.php	(revision 22598)
+++ lib/ezlocale/classes/ezlocale.php	(working copy)
@@ -980,14 +980,31 @@
     */
     function formatTimeType( $fmt, $time = false )
     {
+        $user = eZUser::currentUser();
+        $revertTimeZone = false;
+        $prefTimeZone = eZPreferences::value( 'time_zone' );
+        $envTimeZone = date_default_timezone_get();
+        if ( $prefTimeZone && $prefTimeZone !== $envTimeZone )
+        {
+            date_default_timezone_set( $prefTimeZone );
+            $revertTimeZone = true;
+        }
+
         if ( $time == false )
             $time = time();
 
         $text = date( eZLocale::transformToPHPFormat( $fmt, $this->TimePHPArray ), $time );
-        return  str_replace( array( '%a', '%A' ),
-                             array( $this->meridiemName( $time, false ),
-                                    $this->meridiemName( $time, true ) ),
-                             $text );
+        $value = str_replace( array( '%a', '%A' ),
+                              array( $this->meridiemName( $time, false ),
+                                     $this->meridiemName( $time, true ) ),
+                              $text );
+
+        if ( $revertTimeZone )
+        {
+            date_default_timezone_set( $envTimeZone );
+        }
+
+        return $value;
     }
 
     /*!
@@ -1052,16 +1069,32 @@
     */
     function formatDateType( $fmt, $date = false )
     {
+        $user = eZUser::currentUser();
+        $revertTimeZone = false;
+        $prefTimeZone = eZPreferences::value( 'time_zone' );
+        $envTimeZone = date_default_timezone_get();
+        if ( $prefTimeZone && $prefTimeZone !== $envTimeZone )
+        {
+            date_default_timezone_set( $prefTimeZone );
+            $revertTimeZone = true;
+        }
+
         if ( $date === false )
             $date = time();
 
         $text = date( eZLocale::transformToPHPFormat( $fmt, $this->DatePHPArray ), $date );
-        return str_replace( array( '%D', '%l', '%M', '%F' ),
-                            array( $this->shortDayName( date( 'w', $date ) ),
-                                   $this->longDayName( date( 'w', $date ) ),
-                                   $this->shortMonthName( date( 'n', $date ) ),
-                                   $this->longMonthName( date( 'n', $date ) ) ),
-                            $text );
+        $value = str_replace( array( '%D', '%l', '%M', '%F' ),
+                              array( $this->shortDayName( date( 'w', $date ) ),
+                                     $this->longDayName( date( 'w', $date ) ),
+                                     $this->shortMonthName( date( 'n', $date ) ),
+                                     $this->longMonthName( date( 'n', $date ) ) ),
+                              $text );
+        if ( $revertTimeZone )
+        {
+            date_default_timezone_set( $envTimeZone );
+        }
+
+        return $value;
     }
 
     /*!
@@ -1071,21 +1104,38 @@
     */
     function formatDateTimeType( $fmt, $datetime = false )
     {
+        $user = eZUser::currentUser();
+        $revertTimeZone = false;
+        $prefTimeZone = eZPreferences::value( 'time_zone' );
+        $envTimeZone = date_default_timezone_get();
+        if ( $prefTimeZone && $prefTimeZone !== $envTimeZone )
+        {
+            date_default_timezone_set( $prefTimeZone );
+            $revertTimeZone = true;
+        }
+
         if ( $datetime === false )
             $datetime = time();
 
         $text = date( eZLocale::transformToPHPFormat( $fmt, $this->DateTimePHPArray ), $datetime );
         // Replace some special 'date' formats that needs to be handled
         // internally by the i18n system and not by PHP
-        return str_replace( array( '%D', '%l', '%M', '%F',
+        $value = str_replace( array( '%D', '%l', '%M', '%F',
                                    '%a', '%A' ),
-                            array( $this->shortDayName( date( 'w', $datetime ) ),
-                                   $this->longDayName( date( 'w', $datetime ) ),
-                                   $this->shortMonthName( date( 'n', $datetime ) ),
-                                   $this->longMonthName( date( 'n', $datetime ) ),
-                                   $this->meridiemName( $datetime, false ),
-                                   $this->meridiemName( $datetime, true ) ),
-                            $text );
+                              array( $this->shortDayName( date( 'w', $datetime ) ),
+                                     $this->longDayName( date( 'w', $datetime ) ),
+                                     $this->shortMonthName( date( 'n', $datetime ) ),
+                                     $this->longMonthName( date( 'n', $datetime ) ),
+                                     $this->meridiemName( $datetime, false ),
+                                     $this->meridiemName( $datetime, true ) ),
+                              $text );
+
+        if ( $revertTimeZone )
+        {
+            date_default_timezone_set( $envTimeZone );
+        }
+
+        return $value;
     }
 
     /*!
