You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2014/11/09 21:01:47 UTC

svn commit: r1637732 - in /pig/trunk: ./ contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/ contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ contrib/piggybank/java/src/main/...

Author: daijy
Date: Sun Nov  9 20:01:47 2014
New Revision: 1637732

URL: http://svn.apache.org/r1637732
Log:
PIG-4267: ToDate has incorrect timezone offsets

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/CustomFormatToISO.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/ISOToUnix.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/UnixToISO.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISODaysBetween.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOHoursBetween.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMinutesBetween.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMonthsBetween.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOSecondsBetween.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOYearsBetween.java
    pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/truncate/ISOHelper.java
    pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/convert/TestConvertDateTime.java
    pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/truncate/TestTruncateDateTime.java
    pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/fetch/FetchLauncher.java
    pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapBase.java
    pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapReduce.java
    pig/trunk/src/org/apache/pig/newplan/logical/rules/ConstantCalculator.java
    pig/trunk/test/org/apache/pig/test/TestBuiltin.java
    pig/trunk/test/org/apache/pig/test/TestConversions.java
    pig/trunk/test/org/apache/pig/test/TestDefaultDateTimeZone.java
    pig/trunk/test/org/apache/pig/test/TestOrderBy.java
    pig/trunk/test/org/apache/pig/test/TestStore.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Sun Nov  9 20:01:47 2014
@@ -118,6 +118,8 @@ OPTIMIZATIONS
  
 BUG FIXES
 
+PIG-4267: ToDate has incorrect timezone offsets (bridiver via daijy)
+
 PIG-4319: Make LoadPredicatePushdown InterfaceAudience.Private till PIG-4093 (rohini)
 
 PIG-4312: TestStreamingUDF tez mode leave orphan process on Windows (daijy)

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/CustomFormatToISO.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/CustomFormatToISO.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/CustomFormatToISO.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/CustomFormatToISO.java Sun Nov  9 20:01:47 2014
@@ -79,8 +79,6 @@ public class CustomFormatToISO extends E
         if (input.get(0) == null || input.get(1) == null) {
             return null;
         }
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
 
         String date = input.get(0).toString();
         String format = input.get(1).toString();
@@ -89,7 +87,7 @@ public class CustomFormatToISO extends E
         DateTimeFormatter parser = DateTimeFormat.forPattern(format);
         DateTime result;
         try {
-            result = parser.parseDateTime(date);
+            result = parser.withOffsetParsed().parseDateTime(date);
         } catch(Exception e) {
             return null;
         }

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/ISOToUnix.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/ISOToUnix.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/ISOToUnix.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/ISOToUnix.java Sun Nov  9 20:01:47 2014
@@ -81,9 +81,6 @@ public class ISOToUnix extends EvalFunc<
             return null;
         }
         
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
-
         DateTime result = new DateTime(input.get(0).toString());
 
         return result.getMillis();

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/UnixToISO.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/UnixToISO.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/UnixToISO.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/convert/UnixToISO.java Sun Nov  9 20:01:47 2014
@@ -81,9 +81,6 @@ public class UnixToISO extends EvalFunc<
             return null;
         }
         
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
-
         DateTime result = new DateTime(DataType.toLong(input.get(0)));
 
         return result.toString();

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISODaysBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISODaysBetween.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISODaysBetween.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISODaysBetween.java Sun Nov  9 20:01:47 2014
@@ -96,8 +96,6 @@ public class ISODaysBetween extends Eval
         if (input.get(0) == null || input.get(1) == null) {
             return null;
         }
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
 
         DateTime startDate = new DateTime(input.get(0).toString());
         DateTime endDate = new DateTime(input.get(1).toString());

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOHoursBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOHoursBetween.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOHoursBetween.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOHoursBetween.java Sun Nov  9 20:01:47 2014
@@ -92,8 +92,6 @@ public class ISOHoursBetween extends Eva
         if (input.get(0) == null || input.get(1) == null) {
             return null;
         }
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
 
         DateTime startDate = new DateTime(input.get(0).toString());
         DateTime endDate = new DateTime(input.get(1).toString());

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMinutesBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMinutesBetween.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMinutesBetween.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMinutesBetween.java Sun Nov  9 20:01:47 2014
@@ -92,8 +92,6 @@ public class ISOMinutesBetween extends E
         if (input.get(0) == null || input.get(1) == null) {
             return null;
         }
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
 
         DateTime startDate = new DateTime(input.get(0).toString());
         DateTime endDate = new DateTime(input.get(1).toString());

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMonthsBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMonthsBetween.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMonthsBetween.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOMonthsBetween.java Sun Nov  9 20:01:47 2014
@@ -95,8 +95,6 @@ public class ISOMonthsBetween extends Ev
         if (input.get(0) == null || input.get(1) == null) {
             return null;
         }
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
 
         DateTime startDate = new DateTime(input.get(0).toString());
         DateTime endDate = new DateTime(input.get(1).toString());

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOSecondsBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOSecondsBetween.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOSecondsBetween.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOSecondsBetween.java Sun Nov  9 20:01:47 2014
@@ -91,8 +91,6 @@ public class ISOSecondsBetween extends E
         if (input.get(0) == null || input.get(1) == null) {
             return null;
         }
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
 
         DateTime startDate = new DateTime(input.get(0).toString());
         DateTime endDate = new DateTime(input.get(1).toString());

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOYearsBetween.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOYearsBetween.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOYearsBetween.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/diff/ISOYearsBetween.java Sun Nov  9 20:01:47 2014
@@ -92,8 +92,6 @@ public class ISOYearsBetween extends Eva
         if (input.get(0) == null || input.get(1) == null) {
             return null;
         }
-        // Set the time to default or the output is in UTC
-        DateTimeZone.setDefault(DateTimeZone.UTC);
 
         DateTime startDate = new DateTime(input.get(0).toString());
         DateTime endDate = new DateTime(input.get(1).toString());

Modified: pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/truncate/ISOHelper.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/truncate/ISOHelper.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/truncate/ISOHelper.java (original)
+++ pig/trunk/contrib/piggybank/java/src/main/java/org/apache/pig/piggybank/evaluation/datetime/truncate/ISOHelper.java Sun Nov  9 20:01:47 2014
@@ -47,26 +47,17 @@ public class ISOHelper {
 	 *  with optional time zone.
 	 * @return a DateTime representing the date, 
 	 *  with DateTimeZone set to the time zone parsed from the string,
-	 *  or else DateTimeZone.defaultTimeZone() if one is set,
+	 *  or else DateTimeZone.getDefault() if one is set,
 	 *  or else UTC.
 	 * @throws ExecException if input is a malformed or empty tuple.
 	 * This method is public so that it can be tested in TestTruncateDateTime. 
 	 * Otherwise, it would have "package" visibility.
 	 */
 	public static DateTime parseDateTime(Tuple input) throws ExecException {	
-	        
-	    // Save previous default time zone for restore later.
-	    DateTimeZone previousDefaultTimeZone = DateTimeZone.getDefault();
-
-	    // Temporarily set default time zone to UTC, for this parse.
-	    DateTimeZone.setDefault(DEFAULT_DATE_TIME_ZONE);
 
 	    String isoDateString = input.get(0).toString();
 	    DateTime dt = ISODateTimeFormat.dateTimeParser().withOffsetParsed().parseDateTime(isoDateString);			
 
-	    // restore previous default TimeZone.
-	    DateTimeZone.setDefault(previousDefaultTimeZone);
-
 	    return dt;
 	}
 	

Modified: pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/convert/TestConvertDateTime.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/convert/TestConvertDateTime.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/convert/TestConvertDateTime.java (original)
+++ pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/convert/TestConvertDateTime.java Sun Nov  9 20:01:47 2014
@@ -23,10 +23,30 @@ import org.apache.pig.data.TupleFactory;
 import org.apache.pig.piggybank.evaluation.datetime.convert.CustomFormatToISO;
 import org.apache.pig.piggybank.evaluation.datetime.convert.ISOToUnix;
 import org.apache.pig.piggybank.evaluation.datetime.convert.UnixToISO;
+import org.joda.time.DateTimeZone;
+
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
 public class TestConvertDateTime {
 
+    private DateTimeZone currentDTZ, defaultDTZ;
+
+    @Before
+    public void setUp() throws Exception {
+        currentDTZ = DateTimeZone.getDefault();
+
+        // set the timezone to somethere other than UTC
+        defaultDTZ = DateTimeZone.forID("+08:00");
+        DateTimeZone.setDefault(defaultDTZ);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        DateTimeZone.setDefault(currentDTZ);
+    }   
+
     @Test
     public void testBadFormat() throws Exception {
         Tuple t1 = TupleFactory.getInstance().newTuple(2);
@@ -35,7 +55,7 @@ public class TestConvertDateTime {
         CustomFormatToISO convert = new CustomFormatToISO();
         assertNull("Input that doesn't match format should result in null", convert.exec(t1));
         t1.set(0, "July, 2012");
-        assertEquals("Matching format should work correctly", "2012-07-01T00:00:00.000Z", convert.exec(t1));
+        assertEquals("Matching format should work correctly", "2012-07-01T00:00:00.000+08:00", convert.exec(t1));
     }
 
     @Test
@@ -48,7 +68,8 @@ public class TestConvertDateTime {
         UnixToISO func = new UnixToISO();
         String iso = func.exec(t1);
 
-        assertTrue(iso.equals("2009-01-07T01:07:01.000Z"));
+        assertEquals("2009-01-07T09:07:01.000+08:00", iso);
+        assertEquals("Should not change the default timezone", defaultDTZ, DateTimeZone.getDefault());
     }
 
     @Test
@@ -61,7 +82,7 @@ public class TestConvertDateTime {
         Long unix = func2.exec(t2);
 
         assertTrue(unix == 1231290421000L);
-
+        assertEquals("Should not change the default timezone", defaultDTZ, DateTimeZone.getDefault());
     }
 
     @Test
@@ -73,6 +94,20 @@ public class TestConvertDateTime {
         CustomFormatToISO func = new CustomFormatToISO();
         String iso = func.exec(t);
 
-        assertTrue(iso.equals("2010-10-10T00:00:00.000Z"));
+        assertEquals("2010-10-10T00:00:00.000+08:00", iso);
     }
+
+    @Test
+    public void testCustomFormatToISOWithTimezone() throws Exception {
+
+        Tuple t = TupleFactory.getInstance().newTuple(2);
+        t.set(0, "10/10/2010 Z");
+        t.set(1, "dd/MM/yyyy Z");
+        CustomFormatToISO func = new CustomFormatToISO();
+        String iso = func.exec(t);
+
+        assertEquals("2010-10-10T00:00:00.000Z", iso);
+        assertEquals("Should not change the default timezone", defaultDTZ, DateTimeZone.getDefault());
+    }
+
 }

Modified: pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/truncate/TestTruncateDateTime.java
URL: http://svn.apache.org/viewvc/pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/truncate/TestTruncateDateTime.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/truncate/TestTruncateDateTime.java (original)
+++ pig/trunk/contrib/piggybank/java/src/test/java/org/apache/pig/piggybank/test/evaluation/datetime/truncate/TestTruncateDateTime.java Sun Nov  9 20:01:47 2014
@@ -42,10 +42,8 @@ public class TestTruncateDateTime extend
         Tuple t1 = TupleFactory.getInstance().newTuple(1);
         t1.set(0, "2010-04-15T08:11:33.020");
 
-        // ISOHelper's internal default timezone is preferred over previous default DateTimeZone.
-        assertEquals(ISOHelper.parseDateTime(t1), new DateTime(2010, 4, 15, 8, 11, 33, 20, ISOHelper.DEFAULT_DATE_TIME_ZONE));
+        assertEquals(new DateTime(2010, 4, 15, 8, 11, 33, 20, testDefaultDateTimeZone), ISOHelper.parseDateTime(t1));
 
-        // Calling parseDate restores DateTimeZone.default before it returns.
         assertTrue(testDefaultDateTimeZone.equals(DateTimeZone.getDefault()));
 
         // Restore pre-test default time zone.
@@ -59,7 +57,7 @@ public class TestTruncateDateTime extend
         t1.set(0, "2010-04-15T08:11:33.020Z");
 
         // Time zone is preserved.
-        assertEquals(ISOHelper.parseDateTime(t1), new DateTime(2010, 4, 15, 8, 11, 33, 20, DateTimeZone.UTC));
+        assertEquals(new DateTime(2010, 4, 15, 8, 11, 33, 20, DateTimeZone.UTC), ISOHelper.parseDateTime(t1));
 
         // Time zone is strictly preserved. Parsed date is not equal to "simultaneous" datetime in different time zone.
         assertFalse(ISOHelper.parseDateTime(t1).equals(new DateTime(2010, 4, 15, 0, 11, 33, 20, DateTimeZone.forOffsetHours(-8))));
@@ -72,14 +70,14 @@ public class TestTruncateDateTime extend
         t1.set(0, "2010-04-15T08:11:33.020-08:00");
 
         // Time zone is preserved.
-        assertEquals(ISOHelper.parseDateTime(t1), new DateTime(2010, 4, 15, 8, 11, 33, 20, DateTimeZone.forOffsetHours(-8)));        
+        assertEquals(new DateTime(2010, 4, 15, 8, 11, 33, 20, DateTimeZone.forOffsetHours(-8)), ISOHelper.parseDateTime(t1));        
 
         // Time zone is strictly preserved. Parsed date is not equal to "simultaneous" datetime in different time zone.
         assertFalse(ISOHelper.parseDateTime(t1).equals(new DateTime(2010, 4, 15, 16, 11, 33, 20, DateTimeZone.UTC)));        
     }
     
     /**
-     * When no time zone is specified at all, UTC is presumed.
+     * When no time zone is specified at all, we use the default.
      * @throws Exception
      */
     @Test
@@ -89,7 +87,7 @@ public class TestTruncateDateTime extend
         t1.set(0, "2010-04-15T08:11:33.020");
 
         // Time zone is preserved.
-        assertEquals(ISOHelper.parseDateTime(t1), new DateTime(2010, 4, 15, 8, 11, 33, 20, DateTimeZone.UTC));
+        assertEquals(new DateTime(2010, 4, 15, 8, 11, 33, 20, DateTimeZone.getDefault()), ISOHelper.parseDateTime(t1));
     }
 
     /**
@@ -112,7 +110,7 @@ public class TestTruncateDateTime extend
     
     /**
      * Parsing ISO date with no time and no time zone works.
-     * Time defaults to midnight in UTC.
+     * Time defaults to midnight in default timezone.
      * @throws Exception
      */
     @Test
@@ -122,7 +120,7 @@ public class TestTruncateDateTime extend
         t1.set(0, "2010-04-15");
 
         // Time zone is preserved.
-        assertEquals(ISOHelper.parseDateTime(t1), new DateTime(2010, 4, 15, 0, 0, 0, 0, DateTimeZone.UTC));        
+        assertEquals(new DateTime(2010, 4, 15, 0, 0, 0, 0, DateTimeZone.getDefault()), ISOHelper.parseDateTime(t1));  
     }
     
     /**
@@ -137,7 +135,7 @@ public class TestTruncateDateTime extend
         t1.set(0, "T08:11:33.020Z");
 
         // Time zone is preserved.
-        assertEquals(ISOHelper.parseDateTime(t1), new DateTime(1970, 1, 1, 8, 11, 33, 20, DateTimeZone.UTC));        
+        assertEquals(new DateTime(1970, 1, 1, 8, 11, 33, 20, DateTimeZone.UTC), ISOHelper.parseDateTime(t1));        
     }
     
     /**
@@ -152,7 +150,7 @@ public class TestTruncateDateTime extend
         t1.set(0, "T08:11:33.020-0800");
 
         // Time zone is preserved.
-        assertEquals(ISOHelper.parseDateTime(t1), new DateTime(1970, 1, 1, 8, 11, 33, 20, DateTimeZone.forOffsetHours(-8)));        
+        assertEquals(new DateTime(1970, 1, 1, 8, 11, 33, 20, DateTimeZone.forOffsetHours(-8)), ISOHelper.parseDateTime(t1));        
     }
 
     /**
@@ -167,7 +165,7 @@ public class TestTruncateDateTime extend
         t1.set(0, "T08:11:33.020Z");
 
         // Time zone is preserved.
-        assertEquals(ISOHelper.parseDateTime(t1), new DateTime(1970, 1, 1, 8, 11, 33, 20, DateTimeZone.UTC));        
+        assertEquals(new DateTime(1970, 1, 1, 8, 11, 33, 20, DateTimeZone.UTC), ISOHelper.parseDateTime(t1));        
     }
     
     @Test
@@ -179,7 +177,7 @@ public class TestTruncateDateTime extend
         ISOToYear func = new ISOToYear();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-01-01T00:00:00.000Z");
+        assertEquals("2010-01-01T00:00:00.000Z", truncated);
     }
 
     @Test
@@ -191,7 +189,7 @@ public class TestTruncateDateTime extend
         ISOToMonth func = new ISOToMonth();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-01T00:00:00.000Z");
+        assertEquals("2010-04-01T00:00:00.000Z", truncated);
     }
 
     @Test
@@ -203,7 +201,7 @@ public class TestTruncateDateTime extend
         ISOToWeek func = new ISOToWeek();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-12T00:00:00.000Z");
+        assertEquals("2010-04-12T00:00:00.000Z", truncated);
     }
 
     @Test
@@ -215,7 +213,7 @@ public class TestTruncateDateTime extend
         ISOToDay func = new ISOToDay();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-15T00:00:00.000Z");
+        assertEquals("2010-04-15T00:00:00.000Z", truncated);
     }
 
     @Test
@@ -227,7 +225,7 @@ public class TestTruncateDateTime extend
         ISOToHour func = new ISOToHour();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-15T08:00:00.000Z");
+        assertEquals("2010-04-15T08:00:00.000Z", truncated);
     }
 
     @Test
@@ -239,7 +237,7 @@ public class TestTruncateDateTime extend
         ISOToMinute func = new ISOToMinute();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-15T08:11:00.000Z");
+        assertEquals("2010-04-15T08:11:00.000Z", truncated);
     }
 
     @Test
@@ -251,7 +249,7 @@ public class TestTruncateDateTime extend
         ISOToSecond func = new ISOToSecond();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-15T08:11:33.000Z");
+        assertEquals("2010-04-15T08:11:33.000Z", truncated);
     }
 
 
@@ -264,7 +262,7 @@ public class TestTruncateDateTime extend
         ISOToYear func = new ISOToYear();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-01-01T00:00:00.000-08:00");
+        assertEquals("2010-01-01T00:00:00.000-08:00", truncated);
     }
 
     @Test
@@ -276,7 +274,7 @@ public class TestTruncateDateTime extend
         ISOToMonth func = new ISOToMonth();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-01T00:00:00.000-08:00");
+        assertEquals("2010-04-01T00:00:00.000-08:00", truncated);
     }
 
     @Test
@@ -288,7 +286,7 @@ public class TestTruncateDateTime extend
         ISOToWeek func = new ISOToWeek();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-12T00:00:00.000-08:00");
+        assertEquals("2010-04-12T00:00:00.000-08:00", truncated);
     }
 
     @Test
@@ -300,7 +298,7 @@ public class TestTruncateDateTime extend
         ISOToDay func = new ISOToDay();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-15T00:00:00.000-08:00");
+        assertEquals("2010-04-15T00:00:00.000-08:00", truncated);
     }
 
     @Test
@@ -312,7 +310,7 @@ public class TestTruncateDateTime extend
         ISOToHour func = new ISOToHour();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-15T08:00:00.000-08:00");
+        assertEquals("2010-04-15T08:00:00.000-08:00", truncated);
     }
 
     @Test
@@ -324,7 +322,7 @@ public class TestTruncateDateTime extend
         ISOToMinute func = new ISOToMinute();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-15T08:11:00.000-08:00");
+        assertEquals("2010-04-15T08:11:00.000-08:00", truncated);
     }
 
     @Test
@@ -336,7 +334,7 @@ public class TestTruncateDateTime extend
         ISOToSecond func = new ISOToSecond();
         String truncated = func.exec(t1);
 
-        assertEquals(truncated, "2010-04-15T08:11:33.000-08:00");
+        assertEquals("2010-04-15T08:11:33.000-08:00", truncated);
     }
 
-}
\ No newline at end of file
+}

Modified: pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/fetch/FetchLauncher.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/fetch/FetchLauncher.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/fetch/FetchLauncher.java (original)
+++ pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/fetch/FetchLauncher.java Sun Nov  9 20:01:47 2014
@@ -143,8 +143,8 @@ public class FetchLauncher {
         PigMapReduce.sJobConfInternal.set(conf);
         String dtzStr = conf.get("pig.datetime.default.tz");
         if (dtzStr != null && dtzStr.length() > 0) {
-            // ensure that the internal timezone is uniformly in UTC offset style
-            DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.forID(dtzStr).getOffset(null)));
+            // don't use offsets because it breaks across DST/Standard Time
+            DateTimeZone.setDefault(DateTimeZone.forID(dtzStr));
         }
 
         boolean aggregateWarning = "true".equalsIgnoreCase(conf.get("aggregate.warning"));

Modified: pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapBase.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapBase.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapBase.java (original)
+++ pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapBase.java Sun Nov  9 20:01:47 2014
@@ -217,8 +217,8 @@ public abstract class PigGenericMapBase 
 
         String dtzStr = PigMapReduce.sJobConfInternal.get().get("pig.datetime.default.tz");
         if (dtzStr != null && dtzStr.length() > 0) {
-            // ensure that the internal timezone is uniformly in UTC offset style
-            DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.forID(dtzStr).getOffset(null)));
+            // don't use offsets because it breaks across DST/Standard Time
+            DateTimeZone.setDefault(DateTimeZone.forID(dtzStr));
         }
     }
 

Modified: pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapReduce.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapReduce.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapReduce.java (original)
+++ pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/mapReduceLayer/PigGenericMapReduce.java Sun Nov  9 20:01:47 2014
@@ -364,8 +364,8 @@ public class PigGenericMapReduce {
 
             String dtzStr = PigMapReduce.sJobConfInternal.get().get("pig.datetime.default.tz");
             if (dtzStr != null && dtzStr.length() > 0) {
-                // ensure that the internal timezone is uniformly in UTC offset style
-                DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.forID(dtzStr).getOffset(null)));
+                // don't use offsets because it breaks across DST/Standard Time
+                DateTimeZone.setDefault(DateTimeZone.forID(dtzStr));
             }
         }
 

Modified: pig/trunk/src/org/apache/pig/newplan/logical/rules/ConstantCalculator.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/newplan/logical/rules/ConstantCalculator.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/newplan/logical/rules/ConstantCalculator.java (original)
+++ pig/trunk/src/org/apache/pig/newplan/logical/rules/ConstantCalculator.java Sun Nov  9 20:01:47 2014
@@ -49,6 +49,7 @@ import org.apache.pig.newplan.logical.op
 import org.apache.pig.newplan.logical.relational.LogicalRelationalOperator;
 import org.apache.pig.newplan.optimizer.Rule;
 import org.apache.pig.newplan.optimizer.Transformer;
+import org.joda.time.DateTimeZone;
 
 public abstract class ConstantCalculator extends Rule {
     private List<LogicalRelationalOperator> processedOperators = new ArrayList<LogicalRelationalOperator>();
@@ -108,6 +109,7 @@ public abstract class ConstantCalculator
         public static class ConstantCalculatorExpressionVisitor extends AllSameExpressionVisitor {
             private LogicalRelationalOperator currentOp;
             private PigContext pc;
+            private DateTimeZone currentDTZ = null;
             public ConstantCalculatorExpressionVisitor(OperatorPlan expPlan,
                     LogicalRelationalOperator currentOp, PigContext pc) throws FrontendException {
                 super(expPlan, new ReverseDependencyOrderWalkerWOSeenChk(expPlan));
@@ -151,7 +153,9 @@ public abstract class ConstantCalculator
                         UDFContext.getUDFContext().addJobConf(ConfigurationUtil.toConfiguration(pc.getProperties(), true));
                         PigHadoopLogger pigHadoopLogger = PigHadoopLogger.getInstance();
                         PhysicalOperator.setPigLogger(pigHadoopLogger);
+                        setDefaultTimeZone();
                         val = root.getNext(root.getResultType()).result;
+                        restoreDefaultTimeZone();
                         UDFContext.getUDFContext().addJobConf(null);
                     } catch (ExecException e) {
                         throw new FrontendException(e);
@@ -162,7 +166,9 @@ public abstract class ConstantCalculator
                     UserFuncExpression udf = (UserFuncExpression)op;
                     try {
                         UDFContext.getUDFContext().addJobConf(ConfigurationUtil.toConfiguration(pc.getProperties(), true));
+                        setDefaultTimeZone();
                         val = udf.getEvalFunc().exec(null);
+                        restoreDefaultTimeZone();
                         UDFContext.getUDFContext().addJobConf(null);
                     } catch (IOException e) {
                         throw new FrontendException(e);
@@ -176,6 +182,21 @@ public abstract class ConstantCalculator
                     currentWalker.getPlan().replace(op, constantExpr);
                 }
             }
+
+            private void setDefaultTimeZone() {
+                String dtzStr = pc.getProperties().getProperty("pig.datetime.default.tz");
+                if (dtzStr != null && dtzStr.length() > 0) {
+                    currentDTZ = DateTimeZone.getDefault();
+                    DateTimeZone.setDefault(DateTimeZone.forID(dtzStr));
+                }
+            }
+
+            private void restoreDefaultTimeZone() {
+                if (currentDTZ != null) {
+                    DateTimeZone.setDefault(currentDTZ);
+                    currentDTZ = null;
+                }
+            }
         }
 
         @Override

Modified: pig/trunk/test/org/apache/pig/test/TestBuiltin.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestBuiltin.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestBuiltin.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestBuiltin.java Sun Nov  9 20:01:47 2014
@@ -340,7 +340,6 @@ public class TestBuiltin {
         inputMap.put("String", Util.loadNestTuple(TupleFactory.getInstance().newTuple(1), stringInput));
         inputMap.put("DateTime", Util.loadNestTuple(TupleFactory.getInstance().newTuple(1), datetimeInput));
 
-        DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.UTC.getOffset(null)));
     }
 
     @BeforeClass
@@ -397,31 +396,31 @@ public class TestBuiltin {
         Tuple t1 = TupleFactory.getInstance().newTuple(1);
         t1.set(0, 1231290421000L);
         DateTime dt1 = func1.exec(t1);
-        assertEquals(dt1, new DateTime("2009-01-07T01:07:01.000Z"));
+        assertEquals(dt1.compareTo(new DateTime("2009-01-07T01:07:01.000Z")), 0);
 
         ToDateISO func2 = new ToDateISO();
         Tuple t2 = TupleFactory.getInstance().newTuple(1);
         t2.set(0, "2009-01-07T01:07:01.000Z");
         DateTime dt2 = func2.exec(t2);
-        assertEquals(dt2, new DateTime("2009-01-07T01:07:01.000Z"));
+        assertEquals(dt2.compareTo(new DateTime("2009-01-07T01:07:01.000Z")), 0);
 
         Tuple t3 = TupleFactory.getInstance().newTuple(1);
         t3.set(0, "2009-01-07T01:07:01.000+08:00");
         DateTime dt3 = func2.exec(t3);
-        assertEquals(dt3, new DateTime("2009-01-07T01:07:01.000+08:00", DateTimeZone.forID("+08:00")));
+        assertEquals(dt3.compareTo(new DateTime("2009-01-07T01:07:01.000+08:00", DateTimeZone.forID("+08:00"))), 0);
 
         ToDate2ARGS func3 = new ToDate2ARGS();        
         Tuple t4 = TupleFactory.getInstance().newTuple(2);
         t4.set(0, "2009.01.07 AD at 01:07:01");
         t4.set(1, "yyyy.MM.dd G 'at' HH:mm:ss");
         DateTime dt4 = func3.exec(t4);
-        assertEquals(dt4, new DateTime("2009-01-07T01:07:01.000Z"));
+        assertEquals(dt4.compareTo(new DateTime("2009-01-07T01:07:01.000")), 0);
 
         Tuple t5 = TupleFactory.getInstance().newTuple(2);
         t5.set(0, "2009.01.07 AD at 01:07:01 +0800");
         t5.set(1, "yyyy.MM.dd G 'at' HH:mm:ss Z");
         DateTime dt5 = func3.exec(t5);
-        assertEquals(dt5, new DateTime("2009-01-07T01:07:01.000+08:00"));
+        assertEquals(dt5.compareTo(new DateTime("2009-01-07T01:07:01.000+08:00")), 0);
         
         ToDate3ARGS func4 = new ToDate3ARGS();        
         Tuple t6 = TupleFactory.getInstance().newTuple(3);
@@ -429,14 +428,14 @@ public class TestBuiltin {
         t6.set(1, "yyyy.MM.dd G 'at' HH:mm:ss");
         t6.set(2, "+00:00");
         DateTime dt6 = func4.exec(t6);
-        assertEquals(dt6, new DateTime("2009-01-07T01:07:01.000Z", DateTimeZone.forID("+00:00")));
+        assertEquals(dt6.compareTo(new DateTime("2009-01-07T01:07:01.000", DateTimeZone.forID("+00:00"))), 0);
 
         Tuple t7 = TupleFactory.getInstance().newTuple(3);
         t7.set(0, "2009.01.07 AD at 01:07:01 +0800");
         t7.set(1, "yyyy.MM.dd G 'at' HH:mm:ss Z");
         t7.set(2, "Asia/Singapore");
         DateTime dt7 = func4.exec(t7);
-        assertEquals(dt7, new DateTime("2009-01-07T01:07:01.000+08:00", DateTimeZone.forID("+08:00")));
+        assertEquals(dt7.compareTo(new DateTime("2009-01-07T01:07:01.000+08:00", DateTimeZone.forID("+08:00"))), 0);
 
         ToUnixTime func5 = new ToUnixTime();
         Tuple t8 = TupleFactory.getInstance().newTuple(1);
@@ -447,17 +446,17 @@ public class TestBuiltin {
         ToString func6 = new ToString();
 
         Tuple t9 = TupleFactory.getInstance().newTuple(1);
-        t9.set(0, new DateTime("2009-01-07T01:07:01.000Z"));
+        t9.set(0, ToDate.extractDateTime("2009-01-07T01:07:01.000Z"));
         String dtStr1 = func6.exec(t9);
         assertEquals(dtStr1, "2009-01-07T01:07:01.000Z");
 
         Tuple t10 = TupleFactory.getInstance().newTuple(1);
-        t10.set(0, new DateTime("2009-01-07T09:07:01.000+08:00"));
+        t10.set(0, new DateTime("2009-01-07T09:07:01.000+08:00", DateTimeZone.UTC));
         String dtStr2 = func6.exec(t10);
         assertEquals(dtStr2, "2009-01-07T01:07:01.000Z");
 
         Tuple t11 = TupleFactory.getInstance().newTuple(2);
-        t11.set(0, new DateTime("2009-01-07T01:07:01.000Z"));
+        t11.set(0, ToDate.extractDateTime("2009-01-07T01:07:01.000Z"));
         t11.set(1, "yyyy.MM.dd G 'at' HH:mm:ss");
         String dtStr3 = func6.exec(t11);
         assertEquals(dtStr3, "2009.01.07 AD at 01:07:01");
@@ -3057,9 +3056,9 @@ public class TestBuiltin {
     @Test
     public void testGetDateTimeField() throws Exception {
         Tuple t1 = TupleFactory.getInstance().newTuple(1);
-        t1.set(0, new DateTime("2010-04-15T08:11:33.020Z"));
+        t1.set(0, ToDate.extractDateTime("2010-04-15T08:11:33.020Z"));
         Tuple t2 = TupleFactory.getInstance().newTuple(1);
-        t2.set(0, new DateTime("2010-04-15T08:11:33.020+08:00"));
+        t2.set(0, ToDate.extractDateTime("2010-04-15T08:11:33.020+08:00"));
         
         GetYear func1 = new GetYear();
         Integer year = func1.exec(t1);
@@ -3083,7 +3082,7 @@ public class TestBuiltin {
         Integer hour = func4.exec(t1);
         assertEquals(hour.intValue(), 8);
         hour = func4.exec(t2);
-        assertEquals(hour.intValue(), 0);
+        assertEquals(hour.intValue(), 8);
         
         GetMinute func5 = new GetMinute();
         Integer minute = func5.exec(t1);

Modified: pig/trunk/test/org/apache/pig/test/TestConversions.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestConversions.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestConversions.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestConversions.java Sun Nov  9 20:01:47 2014
@@ -41,8 +41,6 @@ import org.apache.pig.parser.ParserExcep
 import org.apache.pig.test.utils.GenRandomData;
 import org.apache.pig.test.utils.TestHelper;
 import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.junit.Before;
 import org.junit.Test;
 
 /**
@@ -56,11 +54,6 @@ public class TestConversions {
     Random r = new Random(42L);
     final int MAX = 10;
 
-    @Before
-    public void setUp() {
-        DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.UTC.getOffset(null)));
-    }
-
     @Test
     public void testBytesToBoolean() throws IOException {
         // valid booleans
@@ -194,7 +187,7 @@ public class TestConversions {
             ResourceFieldSchema fs = GenRandomData.getSmallBagTextTupleFieldSchema();
 
             Tuple convertedTuple = ps.getLoadCaster().bytesToTuple(t.toString().getBytes(), fs);
-            assertTrue(TestHelper.tupleEquals(t, convertedTuple));
+            assertEquals(t, convertedTuple);
         }
 
     }
@@ -207,7 +200,7 @@ public class TestConversions {
         for (int i = 0; i < MAX; i++) {
             DataBag b = GenRandomData.genRandFullTupTextDataBag(r,5,100);
             DataBag convertedBag = ps.getLoadCaster().bytesToBag(b.toString().getBytes(), fs);
-            assertTrue(TestHelper.bagEquals(b, convertedBag));
+            assertTrue(b.equals(convertedBag));
         }
 
     }

Modified: pig/trunk/test/org/apache/pig/test/TestDefaultDateTimeZone.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestDefaultDateTimeZone.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestDefaultDateTimeZone.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestDefaultDateTimeZone.java Sun Nov  9 20:01:47 2014
@@ -42,9 +42,12 @@ import org.junit.Test;
 public class TestDefaultDateTimeZone extends TestCase {
 
     private File tmpFile;
+    private DateTimeZone currentDTZ;
 
     @Before
     public void setUp() throws Exception {
+        currentDTZ = DateTimeZone.getDefault();
+
         tmpFile = File.createTempFile("test", "txt");
         PrintStream ps = new PrintStream(new FileOutputStream(tmpFile));
         ps.println("1970-01-01T00:00:00.000");
@@ -53,6 +56,9 @@ public class TestDefaultDateTimeZone ext
         ps.println("1970-01-03T00:00:00.000Z");
         ps.println("1970-01-05T00:00:00.000");
         ps.println("1970-01-05T00:00:00.000Z");
+        // for testing DST
+        ps.println("2014-02-01T00:00:00.000"); // EST
+        ps.println("2014-06-01T00:00:00.000"); // EDT
         ps.close();
 
     }
@@ -60,6 +66,7 @@ public class TestDefaultDateTimeZone ext
     @After
     public void tearDown() throws Exception {
         tmpFile.delete();
+        DateTimeZone.setDefault(currentDTZ);
     }
 
     @Test
@@ -82,6 +89,25 @@ public class TestDefaultDateTimeZone ext
         assertEquals(expectedItr.hasNext(), actualItr.hasNext());
     }
 
+    @Test
+    public void testDST() throws Exception {
+        String defaultDTZ = "America/New_York"; // a timezone that uses DST
+    	Properties config = new Properties();
+        config.setProperty("pig.datetime.default.tz", defaultDTZ);
+        PigServer pig = new PigServer(ExecType.LOCAL, config);
+        pig.registerQuery("a = load '"
+                + Util.encodeEscape(Util.generateURI(tmpFile.toString(), pig.getPigContext()))
+                + "' as (test:datetime);");
+        pig.registerQuery("b = filter a by test > ToDate('2014-01-01T00:00:00.000');");
+        pig.registerQuery("c = foreach b generate ToString(test, 'Z') as tz;");
+        Iterator<Tuple> actualItr = pig.openIterator("c");
+        
+        Tuple est = actualItr.next();
+        assertEquals(Util.buildTuple("-0500"), est);
+        Tuple edt = actualItr.next();
+        assertEquals(Util.buildTuple("-0400"), edt);
+    }
+    
     private static Iterator<Tuple> generateExpectedResults(DateTimeZone dtz)
             throws Exception {
         List<Tuple> expectedResults = new ArrayList<Tuple>();

Modified: pig/trunk/test/org/apache/pig/test/TestOrderBy.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestOrderBy.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestOrderBy.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestOrderBy.java Sun Nov  9 20:01:47 2014
@@ -65,8 +65,7 @@ public class TestOrderBy {
             ps.println("1\t" + DATA[1][i] + "\t" + DATA[0][i]);
         }
         ps.close();
-        
-        DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.UTC.getOffset(null)));
+    
     }
     
     @After

Modified: pig/trunk/test/org/apache/pig/test/TestStore.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestStore.java?rev=1637732&r1=1637731&r2=1637732&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestStore.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestStore.java Sun Nov  9 20:01:47 2014
@@ -82,7 +82,6 @@ import org.apache.pig.parser.ParserExcep
 import org.apache.pig.parser.QueryParserDriver;
 import org.apache.pig.test.utils.GenRandomData;
 import org.apache.pig.test.utils.TestHelper;
-import org.joda.time.DateTimeZone;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assume;
@@ -116,7 +115,6 @@ public class TestStore {
         inputFileName = TESTDIR + "/TestStore-" + new Random().nextLong() + ".txt";
         outputFileName = TESTDIR + "/TestStore-output-" + new Random().nextLong() + ".txt";
 
-        DateTimeZone.setDefault(DateTimeZone.forOffsetMillis(DateTimeZone.UTC.getOffset(null)));
     }
 
     @After
@@ -355,7 +353,7 @@ public class TestStore {
             t.append(flds[9].compareTo("")!=0 ? ps.getLoadCaster().bytesToBoolean(flds[9].getBytes()) : null);
             t.append(flds[10].compareTo("")!=0 ? ps.getLoadCaster().bytesToDateTime(flds[10].getBytes()) : null);
             t.append(flds[11].compareTo("")!=0 ? ps.getLoadCaster().bytesToCharArray(flds[10].getBytes()) : null);
-            assertTrue(TestHelper.tupleEquals(inputTuple, t));
+            assertEquals(inputTuple, t);
         }
         br.close();
     }