diff --git a/CHANGES.txt b/CHANGES.txt
index a85b7fd..483bc95 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -116,6 +116,8 @@
  
 BUG FIXES
 
+PIG-5431: Date datatype is different between Hive 1.x and Hive 3.x (rohini)
+
 PIG-5433: Fix test failures with TestHBaseStorage and htrace dependency (rohini)
 
 PIG-5430: TestTezGraceParallelism failing due to tez log change (knoguchi)
diff --git a/shims/src/hive1/org/apache/pig/hive/HiveShims.java b/shims/src/hive1/org/apache/pig/hive/HiveShims.java
index b606821..34bdb7e 100644
--- a/shims/src/hive1/org/apache/pig/hive/HiveShims.java
+++ b/shims/src/hive1/org/apache/pig/hive/HiveShims.java
@@ -19,6 +19,7 @@
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.sql.Date;
 import java.sql.Timestamp;
 
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -143,6 +144,17 @@
         return new SimpleGenericUDAFParameterInfo(arguments, distinct, allColumns);
     }
 
+    public static class DateShim {
+
+        public static Date cast(Object ts) {
+            return (Date) ts;
+        }
+
+        public static long millisFromDate(Object ts) {
+            return cast(ts).getTime();
+        }
+    }
+
     public static class TimestampShim {
 
         public static Timestamp cast(Object ts) {
diff --git a/shims/src/hive3/org/apache/pig/hive/HiveShims.java b/shims/src/hive3/org/apache/pig/hive/HiveShims.java
index 32456c5..063fbcd 100644
--- a/shims/src/hive3/org/apache/pig/hive/HiveShims.java
+++ b/shims/src/hive3/org/apache/pig/hive/HiveShims.java
@@ -20,6 +20,7 @@
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
+import org.apache.hadoop.hive.common.type.Date;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.common.type.Timestamp;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -165,6 +166,17 @@
         return new SimpleGenericUDAFParameterInfo(arguments, false, distinct, allColumns);
     }
 
+    public static class DateShim {
+
+        public static Date cast(Object ts) {
+            return (Date) ts;
+        }
+
+        public static long millisFromDate(Object ts) {
+            return cast(ts).toEpochMilli();
+        }
+    }
+
     public static class TimestampShim {
 
         public static Timestamp cast(Object ts) {
@@ -191,4 +203,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/src/org/apache/pig/impl/util/hive/HiveUtils.java b/src/org/apache/pig/impl/util/hive/HiveUtils.java
index 5fc0f40..a725a03 100644
--- a/src/org/apache/pig/impl/util/hive/HiveUtils.java
+++ b/src/org/apache/pig/impl/util/hive/HiveUtils.java
@@ -184,8 +184,7 @@
             result = new DateTime(HiveShims.TimestampShim.millisFromTimestamp(poi.getPrimitiveJavaObject(obj)));
             break;
         case DATE:
-            java.sql.Date origDate = (java.sql.Date)poi.getPrimitiveJavaObject(obj);
-            result = new DateTime(origDate.getTime());
+            result = new DateTime(HiveShims.DateShim.millisFromDate(poi.getPrimitiveJavaObject(obj)));
             break;
         case DECIMAL:
             org.apache.hadoop.hive.common.type.HiveDecimal origDecimal =
diff --git a/test/org/apache/pig/builtin/TestOrcStorage.java b/test/org/apache/pig/builtin/TestOrcStorage.java
index b8f6bd5..5472e41 100644
--- a/test/org/apache/pig/builtin/TestOrcStorage.java
+++ b/test/org/apache/pig/builtin/TestOrcStorage.java
@@ -183,6 +183,20 @@
         }
         assertEquals(count, 10000);
     }
+    
+    @Test
+    public void testDate() throws Exception {
+        pigServer.registerQuery("A = load '" + basedir + "datetype.orc'" + " using OrcStorage();" );
+        Schema schema = pigServer.dumpSchema("A");
+        assertEquals(schema.size(), 1);
+        assertEquals(schema.getField(0).type, DataType.DATETIME);
+        Iterator<Tuple> iter = pigServer.openIterator("A");
+        Tuple t = iter.next();
+        assertTrue(t.get(0) instanceof DateTime);
+        assertEquals(t.toString(), "(2022-07-07T00:00:00.000Z)");
+        assertEquals(iter.next().toString(), "(2022-09-09T00:00:00.000Z)");
+        assertFalse(iter.hasNext());
+    }
 
     @Test
     // See PIG-4218
diff --git a/test/org/apache/pig/builtin/orc/datetype.orc b/test/org/apache/pig/builtin/orc/datetype.orc
new file mode 100644
index 0000000..391b27c
--- /dev/null
+++ b/test/org/apache/pig/builtin/orc/datetype.orc
Binary files differ
