]> granicus.if.org Git - postgresql/commitdiff
Add conversion from datetime to time data type.
authorThomas G. Lockhart <lockhart@fourpalms.org>
Sat, 25 Oct 1997 05:16:09 +0000 (05:16 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Sat, 25 Oct 1997 05:16:09 +0000 (05:16 +0000)
Rename date+time conversion to datetime to ensure less than 16 characters
 in routine name (required to fit in pg_proc table).

src/backend/utils/adt/datetime.c

index ed41398dea861b0c68f2255a469e5c791e6754aa..f3b828f259e1bcadd42c580af9178c51a9df265e 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.16 1997/09/08 21:48:22 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v 1.17 1997/10/25 05:16:09 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -110,12 +110,12 @@ date_in(char *str)
        date = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1));
 
        return (date);
-}                                                              /* date_in() */
+} /* date_in() */
 
 /* date_out()
  * Given internal format date, convert to text string.
  */
-char      *
+char *
 date_out(DateADT date)
 {
        char       *result;
@@ -123,31 +123,17 @@ date_out(DateADT date)
                           *tm = &tt;
        char            buf[MAXDATELEN + 1];
 
-#if FALSE
-       int                     year,
-                               month,
-                               day;
-
-#endif
-
        j2date((date + date2j(2000, 1, 1)),
                   &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
 
        EncodeDateOnly(tm, DateStyle, buf);
 
-#if FALSE
-       if (EuroDates == 1)                     /* Output European-format dates */
-               sprintf(buf, "%02d-%02d-%04d", day, month, year);
-       else
-               sprintf(buf, "%02d-%02d-%04d", month, day, year);
-#endif
-
        result = PALLOC(strlen(buf) + 1);
 
        strcpy(result, buf);
 
        return (result);
-}                                                              /* date_out() */
+} /* date_out() */
 
 bool
 date_eq(DateADT dateVal1, DateADT dateVal2)
@@ -165,25 +151,25 @@ bool
 date_lt(DateADT dateVal1, DateADT dateVal2)
 {
        return (dateVal1 < dateVal2);
-}                                                              /* date_lt() */
+} /* date_lt() */
 
 bool
 date_le(DateADT dateVal1, DateADT dateVal2)
 {
        return (dateVal1 <= dateVal2);
-}                                                              /* date_le() */
+} /* date_le() */
 
 bool
 date_gt(DateADT dateVal1, DateADT dateVal2)
 {
        return (dateVal1 > dateVal2);
-}                                                              /* date_gt() */
+} /* date_gt() */
 
 bool
 date_ge(DateADT dateVal1, DateADT dateVal2)
 {
        return (dateVal1 >= dateVal2);
-}                                                              /* date_ge() */
+} /* date_ge() */
 
 int
 date_cmp(DateADT dateVal1, DateADT dateVal2)
@@ -197,47 +183,50 @@ date_cmp(DateADT dateVal1, DateADT dateVal2)
                return 1;
        }
        return 0;
-}                                                              /* date_cmp() */
+} /* date_cmp() */
 
 DateADT
 date_larger(DateADT dateVal1, DateADT dateVal2)
 {
        return (date_gt(dateVal1, dateVal2) ? dateVal1 : dateVal2);
-}                                                              /* date_larger() */
+} /* date_larger() */
 
 DateADT
 date_smaller(DateADT dateVal1, DateADT dateVal2)
 {
        return (date_lt(dateVal1, dateVal2) ? dateVal1 : dateVal2);
-}                                                              /* date_smaller() */
+} /* date_smaller() */
 
-/* Compute difference between two dates in days.  */
+/* Compute difference between two dates in days.
+ */
 int4
 date_mi(DateADT dateVal1, DateADT dateVal2)
 {
        return (dateVal1 - dateVal2);
-}                                                              /* date_mi() */
+} /* date_mi() */
 
 /* Add a number of days to a date, giving a new date.
-   Must handle both positive and negative numbers of days.     */
+ * Must handle both positive and negative numbers of days.
+ */
 DateADT
 date_pli(DateADT dateVal, int4 days)
 {
        return (dateVal + days);
-}                                                              /* date_pli() */
+} /* date_pli() */
 
-/* Subtract a number of days from a date, giving a new date.  */
+/* Subtract a number of days from a date, giving a new date.
+ */
 DateADT
 date_mii(DateADT dateVal, int4 days)
 {
        return (date_pli(dateVal, -days));
-}                                                              /* date_mii() */
+} /* date_mii() */
 
 
 /* date_datetime()
  * Convert date to datetime data type.
  */
-DateTime   *
+DateTime *
 date_datetime(DateADT dateVal)
 {
        DateTime   *result;
@@ -261,7 +250,7 @@ date_datetime(DateADT dateVal)
                elog(WARN, "Datetime out of range", NULL);
 
        return (result);
-}                                                              /* date_datetime() */
+} /* date_datetime() */
 
 
 /* datetime_date()
@@ -302,7 +291,7 @@ datetime_date(DateTime *datetime)
        result = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) - date2j(2000, 1, 1));
 
        return (result);
-}                                                              /* datetime_date() */
+} /* datetime_date() */
 
 
 /* abstime_date()
@@ -344,7 +333,7 @@ abstime_date(AbsoluteTime abstime)
        }
 
        return (result);
-}                                                              /* abstime_date() */
+} /* abstime_date() */
 
 
 /* date2tm()
@@ -388,11 +377,6 @@ date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
                tm->tm_year = tx->tm_year + 1900;
                tm->tm_mon = tx->tm_mon + 1;
                tm->tm_mday = tx->tm_mday;
-#if FALSE
-               tm->tm_hour = tx->tm_hour;
-               tm->tm_min = tx->tm_min;
-               tm->tm_sec = tx->tm_sec;
-#endif
                tm->tm_isdst = tx->tm_isdst;
 
 #ifdef HAVE_INT_TIMEZONE
@@ -420,13 +404,6 @@ date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
        }
        else
        {
-#if FALSE
-               j2date((dateVal + date2j(2000, 1, 1)), &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
-               tm->tm_hour = 0;
-               tm->tm_min = 0;
-               tm->tm_sec = 0;
-#endif
-
 #ifdef DATEDEBUG
                printf("date2tm- convert %d-%d-%d %d:%d%d to datetime\n",
                           tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
@@ -439,7 +416,7 @@ date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
        }
 
        return 0;
-}                                                              /* date2tm() */
+} /* date2tm() */
 
 
 /*****************************************************************************
@@ -447,7 +424,7 @@ date2tm(DateADT dateVal, int *tzp, struct tm * tm, double *fsec, char **tzn)
  *****************************************************************************/
 
 
-TimeADT    *
+TimeADT *
 time_in(char *str)
 {
        TimeADT    *time;
@@ -481,22 +458,16 @@ time_in(char *str)
        *time = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec + fsec);
 
        return (time);
-}                                                              /* time_in() */
+} /* time_in() */
 
 
-char      *
+char *
 time_out(TimeADT *time)
 {
        char       *result;
        struct tm       tt,
                           *tm = &tt;
 
-#if FALSE
-       int                     hour,
-                               min,
-                               sec;
-
-#endif
        double          fsec;
        char            buf[MAXDATELEN + 1];
 
@@ -511,31 +482,12 @@ time_out(TimeADT *time)
 
        EncodeTimeOnly(tm, fsec, DateStyle, buf);
 
-#if FALSE
-       if (sec == 0.0)
-       {
-               sprintf(buf, "%02d:%02d", hour, min);
-
-       }
-       else
-       {
-               if (fsec == 0)
-               {
-                       sprintf(buf, "%02d:%02d:%02d", hour, min, sec);
-               }
-               else
-               {
-                       sprintf(buf, "%02d:%02d:%05.2f", hour, min, (sec + fsec));
-               }
-       }
-#endif
-
        result = PALLOC(strlen(buf) + 1);
 
        strcpy(result, buf);
 
        return (result);
-}                                                              /* time_out() */
+} /* time_out() */
 
 
 bool
@@ -545,7 +497,7 @@ time_eq(TimeADT *time1, TimeADT *time2)
                return (FALSE);
 
        return (*time1 == *time2);
-}                                                              /* time_eq() */
+} /* time_eq() */
 
 bool
 time_ne(TimeADT *time1, TimeADT *time2)
@@ -554,7 +506,7 @@ time_ne(TimeADT *time1, TimeADT *time2)
                return (FALSE);
 
        return (*time1 != *time2);
-}                                                              /* time_eq() */
+} /* time_eq() */
 
 bool
 time_lt(TimeADT *time1, TimeADT *time2)
@@ -563,7 +515,7 @@ time_lt(TimeADT *time1, TimeADT *time2)
                return (FALSE);
 
        return (*time1 < *time2);
-}                                                              /* time_eq() */
+} /* time_eq() */
 
 bool
 time_le(TimeADT *time1, TimeADT *time2)
@@ -572,7 +524,7 @@ time_le(TimeADT *time1, TimeADT *time2)
                return (FALSE);
 
        return (*time1 <= *time2);
-}                                                              /* time_eq() */
+} /* time_eq() */
 
 bool
 time_gt(TimeADT *time1, TimeADT *time2)
@@ -581,7 +533,7 @@ time_gt(TimeADT *time1, TimeADT *time2)
                return (FALSE);
 
        return (*time1 > *time2);
-}                                                              /* time_eq() */
+} /* time_eq() */
 
 bool
 time_ge(TimeADT *time1, TimeADT *time2)
@@ -590,20 +542,65 @@ time_ge(TimeADT *time1, TimeADT *time2)
                return (FALSE);
 
        return (*time1 >= *time2);
-}                                                              /* time_eq() */
+} /* time_eq() */
 
 int
 time_cmp(TimeADT *time1, TimeADT *time2)
 {
        return ((*time1 < *time2) ? -1 : (((*time1 > *time2) ? 1 : 0)));
-}                                                              /* time_cmp() */
+} /* time_cmp() */
 
 
-/* datetime_datetime()
+/* datetime_time()
+ * Convert datetime to time data type.
+ */
+TimeADT *
+datetime_time(DateTime *datetime)
+{
+       TimeADT         *result;
+       struct tm       tt,
+                          *tm = &tt;
+       int                     tz;
+       double          fsec;
+       char       *tzn;
+
+       if (!PointerIsValid(datetime))
+               elog(WARN, "Unable to convert null datetime to date", NULL);
+
+       if (DATETIME_NOT_FINITE(*datetime))
+               elog(WARN, "Unable to convert datetime to date", NULL);
+
+       if (DATETIME_IS_EPOCH(*datetime))
+       {
+               datetime2tm(SetDateTime(*datetime), NULL, tm, &fsec, NULL);
+
+       }
+       else if (DATETIME_IS_CURRENT(*datetime))
+       {
+               datetime2tm(SetDateTime(*datetime), &tz, tm, &fsec, &tzn);
+
+       }
+       else
+       {
+               if (datetime2tm(*datetime, &tz, tm, &fsec, &tzn) != 0)
+                       elog(WARN, "Unable to convert datetime to date", NULL);
+       }
+
+       result = PALLOCTYPE(TimeADT);
+
+       *result = ((((tm->tm_hour * 60) + tm->tm_min) * 60) + tm->tm_sec + fsec);
+
+       return (result);
+} /* datetime_time() */
+
+
+/* datet_datetime()
  * Convert date and time to datetime data type.
+ * Should be called datetime_datetime()
+ *  but need <= 16 characters for function names.
  */
-DateTime   *
-datetime_datetime(DateADT date, TimeADT *time)
+DateTime *
+datet_datetime(DateADT date, TimeADT *time)
 {
        DateTime   *result;
 
@@ -611,16 +608,13 @@ datetime_datetime(DateADT date, TimeADT *time)
        {
                result = PALLOCTYPE(DateTime);
                DATETIME_INVALID(*result);
-
-       }
-       else
-       {
+       } else {
                result = date_datetime(date);
                *result += *time;
        }
 
        return (result);
-}                                                              /* datetime_datetime() */
+} /* datet_datetime() */
 
 
 int32                                                  /* RelativeTime */