danny0405 commented on a change in pull request #8324: [FLINK-11921][table] 
Upgrade to calcite 1.19
URL: https://github.com/apache/flink/pull/8324#discussion_r284510849
 
 

 ##########
 File path: 
flink-table/flink-table-planner/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java
 ##########
 @@ -719,30 +757,49 @@ public static long timestampStringToUnixDate(String s) {
        }
 
        public static long unixDateExtract(TimeUnitRange range, long date) {
-               return julianExtract(range, (int) date + EPOCH_JULIAN);
+               switch (range) {
+                       case EPOCH:
+                               // no need to extract year/month/day, just 
multiply
+                               return date * SECONDS_PER_DAY;
+                       default:
+                               return julianExtract(range, (int) date + 
EPOCH_JULIAN);
+               }
        }
 
        private static int julianExtract(TimeUnitRange range, int julian) {
-               // Algorithm the book "Astronomical Algorithms" by Jean Meeus, 
1998
-               int b, c;
-               if (julian > 2299160) {
-                       int a = julian + 32044;
-                       b = (4 * a + 3) / 146097;
-                       c = a - b *146097 / 4;
-               } else {
-                       b = 0;
-                       c = julian + 32082;
-               }
-               int d = (4 * c + 3) / 1461;
-               int e = c - (1461 * d) / 4;
-               int m = (5 * e + 2) / 153;
-               int day = e - (153 * m + 2) / 5 + 1;
-               int month = m + 3 - 12 * (m / 10);
-               int year = b * 100 + d - 4800 + (m / 10);
-
+               // this shifts the epoch back to astronomical year -4800 
instead of the
+               // start of the Christian era in year AD 1 of the proleptic 
Gregorian
+               // calendar.
+               int j = julian + 32044;
+               int g = j / 146097;
+               int dg = j % 146097;
+               int c = (dg / 36524 + 1) * 3 / 4;
+               int dc = dg - c * 36524;
+               int b = dc / 1461;
+               int db = dc % 1461;
+               int a = (db / 365 + 1) * 3 / 4;
+               int da = db - a * 365;
+
+               // integer number of full years elapsed since March 1, 4801 BC
+               int y = g * 400 + c * 100 + b * 4 + a;
+               // integer number of full months elapsed since the last March 1
+               int m = (da * 5 + 308) / 153 - 2;
+               // number of days elapsed since day 1 of the month
+               int d = da - (m + 4) * 153 / 5 + 122;
+               int year = y - 4800 + (m + 2) / 12;
 
 Review comment:
   I didn't see the necessity to copy a code snippet and comments it out. If we 
comments out existed code, i agree to keep these comments, but they are very 
new codes.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to