diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index dec91ef01bd76485164a22f79e06ef4ccd7dbdf2..494ab6b491e10bebfa9cdd1531b4643644f492fe 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/commands/variable.c,v 1.110 2005/07/20 16:42:30 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/commands/variable.c,v 1.111 2005/07/21 03:56:10 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -325,7 +325,7 @@ assign_timezone(const char *value, bool doit, GucSource source)
 			if (doit)
 			{
 				/* Here we change from SQL to Unix sign convention */
-				CTimeZone = -hours * 3600;
+				CTimeZone = -hours * SECS_PER_HOUR;
 				HasCTZSet = true;
 			}
 		}
@@ -402,7 +402,7 @@ assign_timezone(const char *value, bool doit, GucSource source)
 		if (!result)
 			return NULL;
 		snprintf(result, 64, "%.5f",
-				 (double) (-CTimeZone) / 3600.0);
+				 (double) (-CTimeZone) / (double)SECS_PER_HOUR);
 	}
 	else
 		result = strdup(value);
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 6964af6789836dc8a821b0fb05cabff5eb2f8d11..5bc59b148addba6490c0e4f391928805b8f3d2ab 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -37,7 +37,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.459 2005/07/14 05:13:40 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.460 2005/07/21 03:56:11 momjian Exp $
  *
  * NOTES
  *
@@ -1284,7 +1284,7 @@ ServerLoop(void)
 		 * less than an hour ...
 		 */
 		now = time(NULL);
-		if (now - last_touch_time >= 58 * 60)
+		if (now - last_touch_time >= 58 * SECS_PER_MINUTE)
 		{
 			TouchSocketFile();
 			TouchSocketLockFile();
diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c
index c6f02520bfcdfd05324fb4709d5cdc4e46b40fc8..0084cff226efacacbe8312ddab74389a56805f8d 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -18,7 +18,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.16 2005/07/04 04:51:47 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.17 2005/07/21 03:56:11 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -41,7 +41,7 @@
 #include "storage/pg_shmem.h"
 #include "utils/guc.h"
 #include "utils/ps_status.h"
-
+#include "utils/timestamp.h"
 
 /*
  * We really want line-buffered mode for logfile output, but Windows does
@@ -60,7 +60,7 @@
  * start, but the rest can change at SIGHUP.
  */
 bool		Redirect_stderr = false;
-int			Log_RotationAge = 24 * 60;
+int			Log_RotationAge = HOURS_PER_DAY * SECS_PER_MINUTE;
 int			Log_RotationSize = 10 * 1024;
 char	   *Log_directory = NULL;
 char	   *Log_filename = NULL;
@@ -855,7 +855,7 @@ set_next_rotation_time(void)
 	 * fairly loosely.  In this version we align to local time rather than
 	 * GMT.
 	 */
-	rotinterval = Log_RotationAge * 60; /* convert to seconds */
+	rotinterval = Log_RotationAge * SECS_PER_MINUTE; /* convert to seconds */
 	now = time(NULL);
 	tm = pg_localtime(&now, global_timezone);
 	now += tm->tm_gmtoff;
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index aab81eabe2bd26ddc7a6ba2cebf7d69419f24bc0..ed5f050242091d4c0e7ccf0aa9d080a13c709436 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.454 2005/07/14 05:13:41 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.455 2005/07/21 03:56:11 momjian Exp $
  *
  * NOTES
  *	  this is the "main" module of the postgres backend and
@@ -3536,10 +3536,10 @@ log_disconnections(int code, Datum arg)
 	end.tv_sec -= port->session_start.tv_sec;
 	end.tv_usec -= port->session_start.tv_usec;
 
-	hours = end.tv_sec / 3600;
-	end.tv_sec %= 3600;
-	minutes = end.tv_sec / 60;
-	seconds = end.tv_sec % 60;
+	hours = end.tv_sec / SECS_PER_HOUR;
+	end.tv_sec %= SECS_PER_HOUR;
+	minutes = end.tv_sec / SECS_PER_MINUTE;
+	seconds = end.tv_sec % SECS_PER_MINUTE;
 
 	/* if time has gone backwards for some reason say so, or print time */
 
diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c
index b416db54385be8031a6f9c7a19d1a4388973cdfd..106bec853077d0f22af933aee0c210044c052e13 100644
--- a/src/backend/utils/adt/date.c
+++ b/src/backend/utils/adt/date.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.113 2005/07/20 16:42:30 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/date.c,v 1.114 2005/07/21 03:56:13 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -31,7 +31,7 @@
 
 /*
  * gcc's -ffast-math switch breaks routines that expect exact results from
- * expressions like timeval / 3600, where timeval is double.
+ * expressions like timeval / SECS_PER_HOUR, where timeval is double.
  */
 #ifdef __FAST_MATH__
 #error -ffast-math is known to break this code
@@ -918,10 +918,10 @@ static int
 tm2time(struct pg_tm * tm, fsec_t fsec, TimeADT *result)
 {
 #ifdef HAVE_INT64_TIMESTAMP
-	*result = ((((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec)
+	*result = ((((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec)
 				* USECS_PER_SEC) + fsec;
 #else
-	*result = ((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec + fsec;
+	*result = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
 #endif
 	return 0;
 }
@@ -946,8 +946,8 @@ time2tm(TimeADT time, struct pg_tm * tm, fsec_t *fsec)
 	double		trem;
 
 	trem = time;
-	TMODULO(trem, tm->tm_hour, 3600.0);
-	TMODULO(trem, tm->tm_min, 60.0);
+	TMODULO(trem, tm->tm_hour, (double)SECS_PER_HOUR);
+	TMODULO(trem, tm->tm_min, (double)SECS_PER_MINUTE);
 	TMODULO(trem, tm->tm_sec, 1.0);
 	*fsec = trem;
 #endif
@@ -1348,10 +1348,10 @@ timestamp_time(PG_FUNCTION_ARGS)
 	 * Could also do this with time = (timestamp / USECS_PER_DAY *
 	 * USECS_PER_DAY) - timestamp;
 	 */
-	result = ((((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec) *
+	result = ((((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
 				USECS_PER_SEC) + fsec;
 #else
-	result = ((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec + fsec;
+	result = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
 #endif
 
 	PG_RETURN_TIMEADT(result);
@@ -1385,10 +1385,10 @@ timestamptz_time(PG_FUNCTION_ARGS)
 	 * Could also do this with time = (timestamp / USECS_PER_DAY *
 	 * USECS_PER_DAY) - timestamp;
 	 */
-	result = ((((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec) *
+	result = ((((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
 				USECS_PER_SEC) + fsec;
 #else
-	result = ((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec + fsec;
+	result = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
 #endif
 
 	PG_RETURN_TIMEADT(result);
@@ -1715,10 +1715,10 @@ static int
 tm2timetz(struct pg_tm * tm, fsec_t fsec, int tz, TimeTzADT *result)
 {
 #ifdef HAVE_INT64_TIMESTAMP
-	result->time = ((((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec) *
+	result->time = ((((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec) *
 					USECS_PER_SEC) + fsec;
 #else
-	result->time = ((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec + fsec;
+	result->time = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec + fsec;
 #endif
 	result->zone = tz;
 
@@ -1843,8 +1843,8 @@ timetz2tm(TimeTzADT *time, struct pg_tm * tm, fsec_t *fsec, int *tzp)
 #else
 	double		trem = time->time;
 
-	TMODULO(trem, tm->tm_hour, 3600.0);
-	TMODULO(trem, tm->tm_min, 60.0);
+	TMODULO(trem, tm->tm_hour, (double)SECS_PER_HOUR);
+	TMODULO(trem, tm->tm_min, (double)SECS_PER_MINUTE);
 	TMODULO(trem, tm->tm_sec, 1.0);
 	*fsec = trem;
 #endif
@@ -2399,13 +2399,13 @@ timetz_part(PG_FUNCTION_ARGS)
 
 			case DTK_TZ_MINUTE:
 				result = -tz;
-				result /= 60;
-				FMODULO(result, dummy, 60.0);
+				result /= SECS_PER_MINUTE;
+				FMODULO(result, dummy, (double)SECS_PER_MINUTE);
 				break;
 
 			case DTK_TZ_HOUR:
 				dummy = -tz;
-				FMODULO(dummy, result, 3600.0);
+				FMODULO(dummy, result, (double)SECS_PER_HOUR);
 				break;
 
 			case DTK_MICROSEC:
diff --git a/src/backend/utils/adt/datetime.c b/src/backend/utils/adt/datetime.c
index ba5fe7855dc1582fb307ae765a85a443727318c7..32df7b78db2b9275a2d4af33178171e5de84c64f 100644
--- a/src/backend/utils/adt/datetime.c
+++ b/src/backend/utils/adt/datetime.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.152 2005/07/12 15:17:44 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.153 2005/07/21 03:56:14 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1447,7 +1447,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp += val * 60;
+						*tzp += val * SECS_PER_MINUTE;
 						break;
 
 					case DTZ:
@@ -1460,7 +1460,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp = val * 60;
+						*tzp = val * SECS_PER_MINUTE;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -1468,7 +1468,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 0;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp = val * 60;
+						*tzp = val * SECS_PER_MINUTE;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -1566,7 +1566,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 	/* check for valid month */
 	if (fmask & DTK_M(MONTH))
 	{
-		if (tm->tm_mon < 1 || tm->tm_mon > 12)
+		if (tm->tm_mon < 1 || tm->tm_mon > MONTHS_PER_YEAR)
 			return DTERR_MD_FIELD_OVERFLOW;
 	}
 
@@ -1667,7 +1667,7 @@ DetermineLocalTimeZone(struct pg_tm * tm)
 	day = ((pg_time_t) date) *SECS_PER_DAY;
 	if (day / SECS_PER_DAY != date)
 		goto overflow;
-	sec = tm->tm_sec + (tm->tm_min + tm->tm_hour * 60) * 60;
+	sec = tm->tm_sec + (tm->tm_min + tm->tm_hour * SECS_PER_MINUTE) * SECS_PER_MINUTE;
 	mytime = day + sec;
 	/* since sec >= 0, overflow could only be from +day to -mytime */
 	if (mytime < 0 && day > 0)
@@ -1679,7 +1679,7 @@ DetermineLocalTimeZone(struct pg_tm * tm)
 	 * that DST boundaries can't be closer together than 48 hours, so
 	 * backing up 24 hours and finding the "next" boundary will work.
 	 */
-	prevtime = mytime - (24 * 60 * 60);
+	prevtime = mytime - (HOURS_PER_DAY * SECS_PER_MINUTE * SECS_PER_MINUTE);
 	if (mytime < 0 && prevtime > 0)
 		goto overflow;
 
@@ -2167,7 +2167,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp += val * 60;
+						*tzp += val * SECS_PER_MINUTE;
 						break;
 
 					case DTZ:
@@ -2180,7 +2180,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp = val * 60;
+						*tzp = val * SECS_PER_MINUTE;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -2188,7 +2188,7 @@ DecodeTimeOnly(char **field, int *ftype, int nf,
 						tm->tm_isdst = 0;
 						if (tzp == NULL)
 							return DTERR_BAD_FORMAT;
-						*tzp = val * 60;
+						*tzp = val * SECS_PER_MINUTE;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -2431,7 +2431,7 @@ DecodeDate(char *str, int fmask, int *tmask, struct pg_tm * tm)
 	}
 
 	/* check for valid month */
-	if (tm->tm_mon < 1 || tm->tm_mon > 12)
+	if (tm->tm_mon < 1 || tm->tm_mon > MONTHS_PER_YEAR)
 		return DTERR_MD_FIELD_OVERFLOW;
 
 	/* check for valid day */
@@ -2833,7 +2833,7 @@ DecodeTimezone(char *str, int *tzp)
 	if (min < 0 || min >= 60)
 		return DTERR_TZDISP_OVERFLOW;
 
-	tz = (hr * 60 + min) * 60;
+	tz = (hr * SECS_PER_MINUTE + min) * SECS_PER_MINUTE;
 	if (*str == '-')
 		tz = -tz;
 
@@ -2890,7 +2890,7 @@ DecodePosixTimezone(char *str, int *tzp)
 	{
 		case DTZ:
 		case TZ:
-			*tzp = (val * 60) - tz;
+			*tzp = (val * SECS_PER_MINUTE) - tz;
 			break;
 
 		default:
@@ -3116,7 +3116,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct pg_tm * tm,
 						{
 							int			sec;
 
-							fval *= 60;
+							fval *= SECS_PER_MINUTE;
 							sec = fval;
 							tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
@@ -3134,7 +3134,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct pg_tm * tm,
 						{
 							int			sec;
 
-							fval *= 3600;
+							fval *= SECS_PER_HOUR;
 							sec = fval;
 							tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
@@ -3188,7 +3188,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct pg_tm * tm,
 						{
 							int			sec;
 
-							fval *= 30 * SECS_PER_DAY;
+							fval *= DAYS_PER_MONTH * SECS_PER_DAY;
 							sec = fval;
 							tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
@@ -3203,28 +3203,28 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct pg_tm * tm,
 					case DTK_YEAR:
 						tm->tm_year += val;
 						if (fval != 0)
-							tm->tm_mon += fval * 12;
+							tm->tm_mon += fval * MONTHS_PER_YEAR;
 						tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR);
 						break;
 
 					case DTK_DECADE:
 						tm->tm_year += val * 10;
 						if (fval != 0)
-							tm->tm_mon += fval * 120;
+							tm->tm_mon += fval * MONTHS_PER_YEAR * 10;
 						tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR);
 						break;
 
 					case DTK_CENTURY:
 						tm->tm_year += val * 100;
 						if (fval != 0)
-							tm->tm_mon += fval * 1200;
+							tm->tm_mon += fval * MONTHS_PER_YEAR * 100;
 						tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR);
 						break;
 
 					case DTK_MILLENNIUM:
 						tm->tm_year += val * 1000;
 						if (fval != 0)
-							tm->tm_mon += fval * 12000;
+							tm->tm_mon += fval * MONTHS_PER_YEAR * 1000;
 						tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR);
 						break;
 
@@ -3422,7 +3422,7 @@ datebsearch(char *key, datetkn *base, unsigned int nel)
 int
 EncodeDateOnly(struct pg_tm * tm, int style, char *str)
 {
-	if (tm->tm_mon < 1 || tm->tm_mon > 12)
+	if (tm->tm_mon < 1 || tm->tm_mon > MONTHS_PER_YEAR)
 		return -1;
 
 	switch (style)
@@ -3482,7 +3482,7 @@ EncodeDateOnly(struct pg_tm * tm, int style, char *str)
 int
 EncodeTimeOnly(struct pg_tm * tm, fsec_t fsec, int *tzp, int style, char *str)
 {
-	if (tm->tm_hour < 0 || tm->tm_hour > 24)
+	if (tm->tm_hour < 0 || tm->tm_hour > HOURS_PER_DAY)
 		return -1;
 
 	sprintf(str, "%02d:%02d", tm->tm_hour, tm->tm_min);
@@ -3509,8 +3509,8 @@ EncodeTimeOnly(struct pg_tm * tm, fsec_t fsec, int *tzp, int style, char *str)
 		int			hour,
 					min;
 
-		hour = -(*tzp / 3600);
-		min = (abs(*tzp) / 60) % 60;
+		hour = -(*tzp / SECS_PER_HOUR);
+		min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 		sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 	}
 
@@ -3538,9 +3538,9 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 
 	/*
 	 * Why are we checking only the month field? Change this to an
-	 * assert... if (tm->tm_mon < 1 || tm->tm_mon > 12) return -1;
+	 * assert... if (tm->tm_mon < 1 || tm->tm_mon > MONTHS_PER_YEAR) return -1;
 	 */
-	Assert(tm->tm_mon >= 1 && tm->tm_mon <= 12);
+	Assert(tm->tm_mon >= 1 && tm->tm_mon <= MONTHS_PER_YEAR);
 
 	switch (style)
 	{
@@ -3582,8 +3582,8 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 			 */
 			if (tzp != NULL && tm->tm_isdst >= 0)
 			{
-				hour = -(*tzp / 3600);
-				min = (abs(*tzp) / 60) % 60;
+				hour = -(*tzp / SECS_PER_HOUR);
+				min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 				sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 			}
 
@@ -3632,8 +3632,8 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 					sprintf(str + strlen(str), " %.*s", MAXTZLEN, *tzn);
 				else
 				{
-					hour = -(*tzp / 3600);
-					min = (abs(*tzp) / 60) % 60;
+					hour = -(*tzp / SECS_PER_HOUR);
+					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 					sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 				}
 			}
@@ -3680,8 +3680,8 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 					sprintf(str + strlen(str), " %.*s", MAXTZLEN, *tzn);
 				else
 				{
-					hour = -(*tzp / 3600);
-					min = (abs(*tzp) / 60) % 60;
+					hour = -(*tzp / SECS_PER_HOUR);
+					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 					sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 				}
 			}
@@ -3746,8 +3746,8 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
 					 * rejected by the date/time parser later. - thomas
 					 * 2001-10-19
 					 */
-					hour = -(*tzp / 3600);
-					min = (abs(*tzp) / 60) % 60;
+					hour = -(*tzp / SECS_PER_HOUR);
+					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 					sprintf(str + strlen(str), (min != 0) ? " %+03d:%02d" : " %+03d", hour, min);
 				}
 			}
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
index eda1967093d8dcb76e2f6846d4746508414ed40e..9f1cc1a476863bdb7a57d385a3311f3c0485fbfc 100644
--- a/src/backend/utils/adt/formatting.c
+++ b/src/backend/utils/adt/formatting.c
@@ -1,7 +1,7 @@
 /* -----------------------------------------------------------------------
  * formatting.c
  *
- * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.91 2005/07/20 16:42:30 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/adt/formatting.c,v 1.92 2005/07/21 03:56:16 momjian Exp $
  *
  *
  *	 Portions Copyright (c) 1999-2005, PostgreSQL Global Development Group
@@ -1718,7 +1718,7 @@ dch_time(int arg, char *inout, int suf, int flag, FormatNode *node, void *data)
 			if (flag == TO_CHAR)
 			{
 				strcpy(inout, ((tm->tm_hour > 11
-							  && tm->tm_hour < 24) ? P_M_STR : A_M_STR));
+							  && tm->tm_hour < HOURS_PER_DAY) ? P_M_STR : A_M_STR));
 				return 3;
 			}
 			else if (flag == FROM_CHAR)
@@ -1737,7 +1737,7 @@ dch_time(int arg, char *inout, int suf, int flag, FormatNode *node, void *data)
 			if (flag == TO_CHAR)
 			{
 				strcpy(inout, ((tm->tm_hour > 11
-								&& tm->tm_hour < 24) ? PM_STR : AM_STR));
+								&& tm->tm_hour < HOURS_PER_DAY) ? PM_STR : AM_STR));
 				return 1;
 			}
 			else if (flag == FROM_CHAR)
@@ -1756,7 +1756,7 @@ dch_time(int arg, char *inout, int suf, int flag, FormatNode *node, void *data)
 			if (flag == TO_CHAR)
 			{
 				strcpy(inout, ((tm->tm_hour > 11
-							  && tm->tm_hour < 24) ? p_m_STR : a_m_STR));
+							  && tm->tm_hour < HOURS_PER_DAY) ? p_m_STR : a_m_STR));
 				return 3;
 			}
 			else if (flag == FROM_CHAR)
@@ -1775,7 +1775,7 @@ dch_time(int arg, char *inout, int suf, int flag, FormatNode *node, void *data)
 			if (flag == TO_CHAR)
 			{
 				strcpy(inout, ((tm->tm_hour > 11
-								&& tm->tm_hour < 24) ? pm_STR : am_STR));
+								&& tm->tm_hour < HOURS_PER_DAY) ? pm_STR : am_STR));
 				return 1;
 			}
 			else if (flag == FROM_CHAR)
@@ -1991,8 +1991,8 @@ dch_time(int arg, char *inout, int suf, int flag, FormatNode *node, void *data)
 		case DCH_SSSS:
 			if (flag == TO_CHAR)
 			{
-				sprintf(inout, "%d", tm->tm_hour * 3600 +
-						tm->tm_min * 60 +
+				sprintf(inout, "%d", tm->tm_hour * SECS_PER_HOUR +
+						tm->tm_min * SECS_PER_MINUTE +
 						tm->tm_sec);
 				if (S_THth(suf))
 					str_numth(p_inout, inout, S_TH_TYPE(suf));
@@ -3129,10 +3129,10 @@ do_to_timestamp(text *date_txt, text *fmt,
 	{
 		int			x = tmfc.ssss;
 
-		tm->tm_hour = x / 3600;
-		x %= 3600;
-		tm->tm_min = x / 60;
-		x %= 60;
+		tm->tm_hour = x / SECS_PER_HOUR;
+		x %= SECS_PER_HOUR;
+		tm->tm_min = x / SECS_PER_MINUTE;
+		x %= SECS_PER_MINUTE;
 		tm->tm_sec = x;
 	}
 
diff --git a/src/backend/utils/adt/nabstime.c b/src/backend/utils/adt/nabstime.c
index 6b1cca15f8de32db1888866661773b377649bb49..c1931ca14aea1bc8192d3368156dbdb70c3b7bae 100644
--- a/src/backend/utils/adt/nabstime.c
+++ b/src/backend/utils/adt/nabstime.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.136 2005/07/20 16:42:30 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/nabstime.c,v 1.137 2005/07/21 03:56:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -199,7 +199,7 @@ tm2abstime(struct pg_tm * tm, int tz)
 		return INVALID_ABSTIME;
 
 	/* convert to seconds */
-	sec = tm->tm_sec + tz + (tm->tm_min + (day * 24 + tm->tm_hour) * 60) * 60;
+	sec = tm->tm_sec + tz + (tm->tm_min + (day * HOURS_PER_DAY + tm->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
 
 	/* check for overflow */
 	if ((day == MAX_DAYNUM && sec < 0) ||
@@ -638,8 +638,8 @@ reltimein(PG_FUNCTION_ARGS)
 	switch (dtype)
 	{
 		case DTK_DELTA:
-			result = ((tm->tm_hour * 60 + tm->tm_min) * 60) + tm->tm_sec;
-			result += tm->tm_year * 36525 * 864 + ((tm->tm_mon * 30) + tm->tm_mday) * SECS_PER_DAY;
+			result = ((tm->tm_hour * SECS_PER_MINUTE + tm->tm_min) * SECS_PER_MINUTE) + tm->tm_sec;
+			result += tm->tm_year * 36525 * 864 + ((tm->tm_mon * DAYS_PER_MONTH) + tm->tm_mday) * SECS_PER_DAY;
 			break;
 
 		default:
@@ -705,8 +705,8 @@ reltime2tm(RelativeTime time, struct pg_tm * tm)
 	FMODULO(dtime, tm->tm_year, 31557600);
 	FMODULO(dtime, tm->tm_mon, 2592000);
 	FMODULO(dtime, tm->tm_mday, SECS_PER_DAY);
-	FMODULO(dtime, tm->tm_hour, 3600);
-	FMODULO(dtime, tm->tm_min, 60);
+	FMODULO(dtime, tm->tm_hour, SECS_PER_HOUR);
+	FMODULO(dtime, tm->tm_min, SECS_PER_MINUTE);
 	FMODULO(dtime, tm->tm_sec, 1);
 }
 
@@ -838,8 +838,8 @@ interval_reltime(PG_FUNCTION_ARGS)
 	double		span;
 #endif
 
-	year = interval->month / 12;
-	month = interval->month % 12;
+	year = interval->month / MONTHS_PER_YEAR;
+	month = interval->month % MONTHS_PER_YEAR;
 	day = interval->day;
 
 #ifdef HAVE_INT64_TIMESTAMP
@@ -848,7 +848,7 @@ interval_reltime(PG_FUNCTION_ARGS)
 			interval->time;
 	span /= USECS_PER_SEC;
 #else
-	span = (365.25 * year + 30.0 * month + day) * SECS_PER_DAY + interval->time;
+	span = (DAYS_PER_YEAR * year + (double)DAYS_PER_MONTH * month + day) * SECS_PER_DAY + interval->time;
 #endif
 
 	if (span < INT_MIN || span > INT_MAX)
@@ -886,20 +886,20 @@ reltime_interval(PG_FUNCTION_ARGS)
 #ifdef HAVE_INT64_TIMESTAMP
 			year = (reltime / (36525 * 864));
 			reltime -= (year * (36525 * 864));
-			month = (reltime / (30 * SECS_PER_DAY));
-			reltime -= (month * (30 * SECS_PER_DAY));
+			month = (reltime / (DAYS_PER_MONTH * SECS_PER_DAY));
+			reltime -= (month * (DAYS_PER_MONTH * SECS_PER_DAY));
 			day = reltime / SECS_PER_DAY;
 			reltime -= day * SECS_PER_DAY;
 
 			result->time = (reltime * USECS_PER_SEC);
 #else
 			TMODULO(reltime, year, 36525 * 864);
-			TMODULO(reltime, month, 30 * SECS_PER_DAY);
+			TMODULO(reltime, month, DAYS_PER_MONTH * SECS_PER_DAY);
 			TMODULO(reltime, day, SECS_PER_DAY);
 
 			result->time = reltime;
 #endif
-			result->month = 12 * year + month;
+			result->month = MONTHS_PER_YEAR * year + month;
 			result->day = day;
 			break;
 	}
diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
index 33726945a3ea55061faacff9e89b462d1fdb6a72..3a22b8f72f1db66eea2d2c1a05d3dfa339e8aa28 100644
--- a/src/backend/utils/adt/selfuncs.c
+++ b/src/backend/utils/adt/selfuncs.c
@@ -15,7 +15,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.185 2005/07/20 16:42:30 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/selfuncs.c,v 1.186 2005/07/21 03:56:18 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2785,10 +2785,10 @@ convert_timevalue_to_scalar(Datum value, Oid typid)
 				 */
 #ifdef HAVE_INT64_TIMESTAMP
 				return interval->time + interval->day * (double)USECS_PER_DAY +
-					   interval->month * ((365.25 / 12.0) * USECS_PER_DAY);
+					   interval->month * ((DAYS_PER_YEAR / (double)MONTHS_PER_YEAR) * USECS_PER_DAY);
 #else
 				return interval->time + interval->day * SECS_PER_DAY +
-						interval->month * ((365.25 / 12.0) * (double)SECS_PER_DAY);
+						interval->month * ((DAYS_PER_YEAR / (double)MONTHS_PER_YEAR) * (double)SECS_PER_DAY);
 #endif
 			}
 		case RELTIMEOID:
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
index dd9e72daa3af785ece016a607ea499e367ef75c2..c7ceaff364c1e0166819443880d7379db64cb1be 100644
--- a/src/backend/utils/adt/timestamp.c
+++ b/src/backend/utils/adt/timestamp.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.134 2005/07/20 16:42:31 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/adt/timestamp.c,v 1.135 2005/07/21 03:56:20 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -34,7 +34,7 @@
 
 /*
  * gcc's -ffast-math switch breaks routines that expect exact results from
- * expressions like timeval / 3600, where timeval is double.
+ * expressions like timeval / SECS_PER_HOUR, where timeval is double.
  */
 #ifdef __FAST_MATH__
 #error -ffast-math is known to break this code
@@ -698,13 +698,13 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 		}
 		else if (range == INTERVAL_MASK(YEAR))
 		{
-			interval->month = (interval->month / 12) * 12;
+			interval->month = (interval->month / MONTHS_PER_YEAR) * MONTHS_PER_YEAR;
 			interval->day = 0;
 			interval->time = 0;
 		}
 		else if (range == INTERVAL_MASK(MONTH))
 		{
-			interval->month %= 12;
+			interval->month %= MONTHS_PER_YEAR;
 			interval->day = 0;
 			interval->time = 0;
 		}
@@ -729,7 +729,7 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 			interval->time = (interval->time / USECS_PER_HOUR) *
 								USECS_PER_HOUR;
 #else
-			interval->time = ((int)(interval->time / 3600)) * 3600.0;
+			interval->time = ((int)(interval->time / SECS_PER_HOUR)) * (double)SECS_PER_HOUR;
 #endif
 		}
 		else if (range == INTERVAL_MASK(MINUTE))
@@ -750,8 +750,8 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 								USECS_PER_MINUTE;
 
 #else
-			TMODULO(interval->time, hour, 3600.0);
-			interval->time = ((int)(interval->time / 60)) * 60.0;
+			TMODULO(interval->time, hour, (double)SECS_PER_HOUR);
+			interval->time = ((int)(interval->time / SECS_PER_MINUTE)) * (double)SECS_PER_MINUTE;
 #endif
 		}
 		else if (range == INTERVAL_MASK(SECOND))
@@ -769,7 +769,7 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 			minute = interval->time / USECS_PER_MINUTE;
 			interval->time -= minute * USECS_PER_MINUTE;
 #else
-			TMODULO(interval->time, minute, 60.0);
+			TMODULO(interval->time, minute, (double)SECS_PER_MINUTE);
 			/* return subseconds too */
 #endif
 		}
@@ -783,7 +783,7 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 			interval->time = (interval->time / USECS_PER_HOUR) *
 								USECS_PER_HOUR;
 #else
-			interval->time = ((int) (interval->time / 3600)) * 3600.0;
+			interval->time = ((int) (interval->time / SECS_PER_HOUR)) * (double)SECS_PER_HOUR;
 #endif
 		}
 		/* DAY TO MINUTE */
@@ -797,7 +797,7 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 			interval->time = (interval->time / USECS_PER_MINUTE) *
 								USECS_PER_MINUTE;
 #else
-			interval->time = ((int)(interval->time / 60)) * 60.0;
+			interval->time = ((int)(interval->time / SECS_PER_MINUTE)) * (double)SECS_PER_MINUTE;
 #endif
 		}
 		/* DAY TO SECOND */
@@ -818,7 +818,7 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 			interval->time = (interval->time / USECS_PER_MINUTE) *
 								USECS_PER_MINUTE;
 #else
-			interval->time = ((int)(interval->time / 60)) * 60.0;
+			interval->time = ((int)(interval->time / SECS_PER_MINUTE)) * (double)SECS_PER_MINUTE;
 #endif
 		}
 		/* HOUR TO SECOND */
@@ -848,7 +848,7 @@ AdjustIntervalForTypmod(Interval *interval, int32 typmod)
 			hour = interval->time / USECS_PER_HOUR;
 			interval->time -= hour * USECS_PER_HOUR;
 #else
-			TMODULO(interval->time, hour, 3600.0);
+			TMODULO(interval->time, hour, (double)SECS_PER_HOUR);
 #endif
 		}
 		else
@@ -971,10 +971,10 @@ dt2time(Timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec)
 	*sec = time / USECS_PER_SEC;
 	*fsec = time - (*sec * USECS_PER_SEC);
 #else
-	*hour = time / 3600;
-	time -= (*hour) * 3600;
-	*min = time / 60;
-	time -= (*min) * 60;
+	*hour = time / SECS_PER_HOUR;
+	time -= (*hour) * SECS_PER_HOUR;
+	*min = time / SECS_PER_MINUTE;
+	time -= (*min) * SECS_PER_MINUTE;
 	*sec = time;
 	*fsec = JROUND(time - *sec);
 #endif
@@ -1180,8 +1180,8 @@ interval2tm(Interval span, struct pg_tm *tm, fsec_t *fsec)
 	double		time;
 #endif
 
-	tm->tm_year = span.month / 12;
-	tm->tm_mon = span.month % 12;
+	tm->tm_year = span.month / MONTHS_PER_YEAR;
+	tm->tm_mon = span.month % MONTHS_PER_YEAR;
 	tm->tm_mday = span.day;
 	time = span.time;
 
@@ -1193,8 +1193,8 @@ interval2tm(Interval span, struct pg_tm *tm, fsec_t *fsec)
 	tm->tm_sec = (time / USECS_PER_SEC);
 	*fsec = (time - (tm->tm_sec * USECS_PER_SEC));
 #else
-	TMODULO(time, tm->tm_hour, 3600.0);
-	TMODULO(time, tm->tm_min, 60.0);
+	TMODULO(time, tm->tm_hour, (double)SECS_PER_HOUR);
+	TMODULO(time, tm->tm_min, (double)SECS_PER_MINUTE);
 	TMODULO(time, tm->tm_sec, 1.0);
 	*fsec = time;
 #endif
@@ -1205,15 +1205,15 @@ interval2tm(Interval span, struct pg_tm *tm, fsec_t *fsec)
 int
 tm2interval(struct pg_tm *tm, fsec_t fsec, Interval *span)
 {
-	span->month = tm->tm_year * 12 + tm->tm_mon;
+	span->month = tm->tm_year * MONTHS_PER_YEAR + tm->tm_mon;
 	span->day   = tm->tm_mday;
 #ifdef HAVE_INT64_TIMESTAMP
-	span->time = (((((tm->tm_hour * INT64CONST(60)) +
-						tm->tm_min) * INT64CONST(60)) +
+	span->time = (((((tm->tm_hour * INT64CONST(SECS_PER_MINUTE)) +
+						tm->tm_min) * INT64CONST(SECS_PER_MINUTE)) +
 						tm->tm_sec) * USECS_PER_SEC) + fsec;
 #else
-	span->time = (((tm->tm_hour * 60.0) +
-						tm->tm_min) * 60.0) +
+	span->time = (((tm->tm_hour * (double)SECS_PER_MINUTE) +
+						tm->tm_min) * (double)SECS_PER_MINUTE) +
 						tm->tm_sec;
 	span->time = JROUND(span->time + fsec);
 #endif
@@ -1225,14 +1225,14 @@ tm2interval(struct pg_tm *tm, fsec_t fsec, Interval *span)
 static int64
 time2t(const int hour, const int min, const int sec, const fsec_t fsec)
 {
-	return (((((hour * 60) + min) * 60) + sec) * USECS_PER_SEC) + fsec;
+	return (((((hour * SECS_PER_MINUTE) + min) * SECS_PER_MINUTE) + sec) * USECS_PER_SEC) + fsec;
 }	/* time2t() */
 
 #else
 static double
 time2t(const int hour, const int min, const int sec, const fsec_t fsec)
 {
-	return (((hour * 60) + min) * 60) + sec + fsec;
+	return (((hour * SECS_PER_MINUTE) + min) * SECS_PER_MINUTE) + sec + fsec;
 }	/* time2t() */
 #endif
 
@@ -1608,15 +1608,15 @@ interval_cmp_internal(Interval *interval1, Interval *interval2)
 	span2 = interval2->time;
 
 #ifdef HAVE_INT64_TIMESTAMP
-	span1 += interval1->month * INT64CONST(30) * USECS_PER_DAY;
-	span1 += interval1->day * INT64CONST(24) * USECS_PER_HOUR;
-	span2 += interval2->month * INT64CONST(30) * USECS_PER_DAY;
-	span2 += interval2->day * INT64CONST(24) * USECS_PER_HOUR;
+	span1 += interval1->month * INT64CONST(DAYS_PER_MONTH) * USECS_PER_DAY;
+	span1 += interval1->day * INT64CONST(HOURS_PER_DAY) * USECS_PER_HOUR;
+	span2 += interval2->month * INT64CONST(DAYS_PER_MONTH) * USECS_PER_DAY;
+	span2 += interval2->day * INT64CONST(HOURS_PER_DAY) * USECS_PER_HOUR;
 #else
-	span1 += interval1->month * (30.0 * SECS_PER_DAY);
-	span1 += interval1->day * (24.0 * SECS_PER_HOUR);
-	span2 += interval2->month * (30.0 * SECS_PER_DAY);
-	span2 += interval2->day * (24.0 * SECS_PER_HOUR);
+	span1 += interval1->month * ((double)DAYS_PER_MONTH * SECS_PER_DAY);
+	span1 += interval1->day * ((double)HOURS_PER_DAY * SECS_PER_HOUR);
+	span2 += interval2->month * ((double)DAYS_PER_MONTH * SECS_PER_DAY);
+	span2 += interval2->day * ((double)HOURS_PER_DAY * SECS_PER_HOUR);
 #endif
 
 	return ((span1 < span2) ? -1 : (span1 > span2) ? 1 : 0);
@@ -1940,12 +1940,12 @@ interval_justify_days(PG_FUNCTION_ARGS)
 	result->time = span->time;
 
 #ifdef HAVE_INT64_TIMESTAMP
-	result->day += span->month * 30.0;
-	result->month = span->day / 30;
-	result->day -= result->month * 30;
+	result->day += span->month * (double)DAYS_PER_MONTH;
+	result->month = span->day / DAYS_PER_MONTH;
+	result->day -= result->month * DAYS_PER_MONTH;
 #else
-	result->day += span->month * 30.0;
-	TMODULO(result->day, result->month, 30.0);
+	result->day += span->month * (double)DAYS_PER_MONTH;
+	TMODULO(result->day, result->month, (double)DAYS_PER_MONTH);
 #endif
 
 	PG_RETURN_INTERVAL_P(result);
@@ -1984,15 +1984,15 @@ timestamp_pl_interval(PG_FUNCTION_ARGS)
 						 errmsg("timestamp out of range")));
 
 			tm->tm_mon += span->month;
-			if (tm->tm_mon > 12)
+			if (tm->tm_mon > MONTHS_PER_YEAR)
 			{
-				tm->tm_year += (tm->tm_mon - 1) / 12;
-				tm->tm_mon = ((tm->tm_mon - 1) % 12) + 1;
+				tm->tm_year += (tm->tm_mon - 1) / MONTHS_PER_YEAR;
+				tm->tm_mon = ((tm->tm_mon - 1) % MONTHS_PER_YEAR) + 1;
 			}
 			else if (tm->tm_mon < 1)
 			{
-				tm->tm_year += tm->tm_mon / 12 - 1;
-				tm->tm_mon = tm->tm_mon % 12 + 12;
+				tm->tm_year += tm->tm_mon / MONTHS_PER_YEAR - 1;
+				tm->tm_mon = tm->tm_mon % MONTHS_PER_YEAR + MONTHS_PER_YEAR;
 			}
 
 			/* adjust for end of month boundary problems... */
@@ -2085,15 +2085,15 @@ timestamptz_pl_interval(PG_FUNCTION_ARGS)
 						 errmsg("timestamp out of range")));
 
 			tm->tm_mon += span->month;
-			if (tm->tm_mon > 12)
+			if (tm->tm_mon > MONTHS_PER_YEAR)
 			{
-				tm->tm_year += (tm->tm_mon - 1) / 12;
-				tm->tm_mon = ((tm->tm_mon - 1) % 12) + 1;
+				tm->tm_year += (tm->tm_mon - 1) / MONTHS_PER_YEAR;
+				tm->tm_mon = ((tm->tm_mon - 1) % MONTHS_PER_YEAR) + 1;
 			}
 			else if (tm->tm_mon < 1)
 			{
-				tm->tm_year += tm->tm_mon / 12 - 1;
-				tm->tm_mon = tm->tm_mon % 12 + 12;
+				tm->tm_year += tm->tm_mon / MONTHS_PER_YEAR - 1;
+				tm->tm_mon = tm->tm_mon % MONTHS_PER_YEAR + MONTHS_PER_YEAR;
 			}
 
 			/* adjust for end of month boundary problems... */
@@ -2264,16 +2264,16 @@ interval_mul(PG_FUNCTION_ARGS)
 	result->month = months;
 	result->day = days;
 	result->time = (span1->time * factor);
-	result->time += (months - result->month) * INT64CONST(30) * USECS_PER_DAY;
-	result->time += (days - result->day) * INT64CONST(24) * USECS_PER_HOUR;
+	result->time += (months - result->month) * INT64CONST(DAYS_PER_MONTH) * USECS_PER_DAY;
+	result->time += (days - result->day) * INT64CONST(HOURS_PER_DAY) * USECS_PER_HOUR;
 #else
 	result->month = (int)months;
 	result->day = (int)days;
 	result->time = JROUND(span1->time * factor);
 	/* evaluate fractional months as 30 days */
-	result->time += JROUND((months - result->month) * 30 * SECS_PER_DAY);
+	result->time += JROUND((months - result->month) * DAYS_PER_MONTH * SECS_PER_DAY);
 	/* evaluate fractional days as 24 hours */
-	result->time += JROUND((days - result->day) * 24 * SECS_PER_HOUR);
+	result->time += JROUND((days - result->day) * HOURS_PER_DAY * SECS_PER_HOUR);
 #endif
 
 	PG_RETURN_INTERVAL_P(result);
@@ -2314,9 +2314,9 @@ interval_div(PG_FUNCTION_ARGS)
 
 	/* Cascade fractions to lower units */
 	/* fractional months full days into days */
-	result->day += month_remainder * 30;
+	result->day += month_remainder * DAYS_PER_MONTH;
 	/* fractional months partial days into time */
-	day_remainder += (month_remainder * 30) - (int)(month_remainder * 30);
+	day_remainder += (month_remainder * DAYS_PER_MONTH) - (int)(month_remainder * DAYS_PER_MONTH);
 
 #ifdef HAVE_INT64_TIMESTAMP
 	result->time += day_remainder * USECS_PER_DAY;
@@ -2469,19 +2469,19 @@ timestamp_age(PG_FUNCTION_ARGS)
 
 		while (tm->tm_sec < 0)
 		{
-			tm->tm_sec += 60;
+			tm->tm_sec += SECS_PER_MINUTE;
 			tm->tm_min--;
 		}
 
 		while (tm->tm_min < 0)
 		{
-			tm->tm_min += 60;
+			tm->tm_min += SECS_PER_MINUTE;
 			tm->tm_hour--;
 		}
 
 		while (tm->tm_hour < 0)
 		{
-			tm->tm_hour += 24;
+			tm->tm_hour += HOURS_PER_DAY;
 			tm->tm_mday--;
 		}
 
@@ -2501,7 +2501,7 @@ timestamp_age(PG_FUNCTION_ARGS)
 
 		while (tm->tm_mon < 0)
 		{
-			tm->tm_mon += 12;
+			tm->tm_mon += MONTHS_PER_YEAR;
 			tm->tm_year--;
 		}
 
@@ -2583,19 +2583,19 @@ timestamptz_age(PG_FUNCTION_ARGS)
 
 		while (tm->tm_sec < 0)
 		{
-			tm->tm_sec += 60;
+			tm->tm_sec += SECS_PER_MINUTE;
 			tm->tm_min--;
 		}
 
 		while (tm->tm_min < 0)
 		{
-			tm->tm_min += 60;
+			tm->tm_min += SECS_PER_MINUTE;
 			tm->tm_hour--;
 		}
 
 		while (tm->tm_hour < 0)
 		{
-			tm->tm_hour += 24;
+			tm->tm_hour += HOURS_PER_DAY;
 			tm->tm_mday--;
 		}
 
@@ -2615,7 +2615,7 @@ timestamptz_age(PG_FUNCTION_ARGS)
 
 		while (tm->tm_mon < 0)
 		{
-			tm->tm_mon += 12;
+			tm->tm_mon += MONTHS_PER_YEAR;
 			tm->tm_year--;
 		}
 
@@ -2881,7 +2881,7 @@ timestamp_trunc(PG_FUNCTION_ARGS)
 				 */
 				if (woy >= 52 && tm->tm_mon == 1)
 					--tm->tm_year;
-				if (woy <= 1 && tm->tm_mon == 12)
+				if (woy <= 1 && tm->tm_mon == MONTHS_PER_YEAR)
 					++tm->tm_year;
 				isoweek2date(woy, &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
 				tm->tm_hour = 0;
@@ -3015,7 +3015,7 @@ timestamptz_trunc(PG_FUNCTION_ARGS)
 				 */
 				if (woy >= 52 && tm->tm_mon == 1)
 					--tm->tm_year;
-				if (woy <= 1 && tm->tm_mon == 12)
+				if (woy <= 1 && tm->tm_mon == MONTHS_PER_YEAR)
 					++tm->tm_year;
 				isoweek2date(woy, &(tm->tm_year), &(tm->tm_mon), &(tm->tm_mday));
 				tm->tm_hour = 0;
@@ -3492,10 +3492,10 @@ timestamp_part(PG_FUNCTION_ARGS)
 			case DTK_JULIAN:
 				result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday);
 #ifdef HAVE_INT64_TIMESTAMP
-				result += ((((tm->tm_hour * 60) + tm->tm_min) * 60) +
+				result += ((((tm->tm_hour * SECS_PER_MINUTE) + tm->tm_min) * SECS_PER_MINUTE) +
 							tm->tm_sec + (fsec / 1000000.0)) / (double)SECS_PER_DAY;
 #else
-				result += ((((tm->tm_hour * 60) + tm->tm_min) * 60) +
+				result += ((((tm->tm_hour * SECS_PER_MINUTE) + tm->tm_min) * SECS_PER_MINUTE) +
 							tm->tm_sec + fsec) / (double)SECS_PER_DAY;
 #endif
 				break;
@@ -3628,13 +3628,13 @@ timestamptz_part(PG_FUNCTION_ARGS)
 
 			case DTK_TZ_MINUTE:
 				result = -tz;
-				result /= 60;
-				FMODULO(result, dummy, 60.0);
+				result /= SECS_PER_MINUTE;
+				FMODULO(result, dummy, (double)SECS_PER_MINUTE);
 				break;
 
 			case DTK_TZ_HOUR:
 				dummy = -tz;
-				FMODULO(dummy, result, 3600.0);
+				FMODULO(dummy, result, (double)SECS_PER_HOUR);
 				break;
 
 			case DTK_MICROSEC:
@@ -3720,10 +3720,10 @@ timestamptz_part(PG_FUNCTION_ARGS)
 			case DTK_JULIAN:
 				result = date2j(tm->tm_year, tm->tm_mon, tm->tm_mday);
 #ifdef HAVE_INT64_TIMESTAMP
-				result += ((((tm->tm_hour * 60) + tm->tm_min) * 60) +
+				result += ((((tm->tm_hour * SECS_PER_MINUTE) + tm->tm_min) * SECS_PER_MINUTE) +
 							tm->tm_sec + (fsec / 1000000.0)) / (double)SECS_PER_DAY;
 #else
-				result += ((((tm->tm_hour * 60) + tm->tm_min) * 60) +
+				result += ((((tm->tm_hour * SECS_PER_MINUTE) + tm->tm_min) * SECS_PER_MINUTE) +
 							tm->tm_sec + fsec) / (double)SECS_PER_DAY;
 #endif
 				break;
@@ -3904,8 +3904,8 @@ interval_part(PG_FUNCTION_ARGS)
 #else
 		result = interval->time;
 #endif
-		result += (365.25 * SECS_PER_DAY) * (interval->month / 12);
-		result += (30.0 * SECS_PER_DAY) * (interval->month % 12);
+		result += (DAYS_PER_YEAR * SECS_PER_DAY) * (interval->month / MONTHS_PER_YEAR);
+		result += ((double)DAYS_PER_MONTH * SECS_PER_DAY) * (interval->month % MONTHS_PER_YEAR);
 		result += interval->day * SECS_PER_DAY;
 	}
 	else
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 194949fbd733bb0d55011082f2cbfca492dd635f..0c843d96f785f1714eede3b7e5eba539cbda43a7 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.274 2005/07/14 05:13:42 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.275 2005/07/21 03:56:21 momjian Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -1349,7 +1349,7 @@ static struct config_int ConfigureNamesInt[] =
 			NULL
 		},
 		&Log_RotationAge,
-		24 * 60, 0, INT_MAX / 60, NULL, NULL
+		HOURS_PER_DAY * SECS_PER_MINUTE, 0, INT_MAX / SECS_PER_MINUTE, NULL, NULL
 	},
 
 	{
diff --git a/src/include/utils/timestamp.h b/src/include/utils/timestamp.h
index 5cf8fd25fef8674cf9c588d628605c38034ebd8e..2fc52d5b5698adb52ff7870858188ed5adbf9373 100644
--- a/src/include/utils/timestamp.h
+++ b/src/include/utils/timestamp.h
@@ -6,7 +6,7 @@
  * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/include/utils/timestamp.h,v 1.47 2005/07/20 16:42:32 momjian Exp $
+ * $PostgreSQL: pgsql/src/include/utils/timestamp.h,v 1.48 2005/07/21 03:56:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -60,8 +60,17 @@ typedef struct
 #define MAX_TIMESTAMP_PRECISION 6
 #define MAX_INTERVAL_PRECISION 6
 
+/* in both timestamp.h and ecpg/dt.h */
+#define DAYS_PER_YEAR	365.25
+#define MONTHS_PER_YEAR	12
+/* average days per month */
+#define DAYS_PER_MONTH	30
+#define HOURS_PER_DAY	24
+
 #define SECS_PER_DAY	86400
 #define SECS_PER_HOUR   3600
+#define SECS_PER_MINUTE 60
+
 #ifdef HAVE_INT64_TIMESTAMP
 #define USECS_PER_DAY	INT64CONST(86400000000)
 #define USECS_PER_HOUR	INT64CONST(3600000000)
diff --git a/src/interfaces/ecpg/pgtypeslib/datetime.c b/src/interfaces/ecpg/pgtypeslib/datetime.c
index 7340764970deb747462da9b09512d3d586d06f25..0a480b658a4d0727b032cef5533b346f05e6d60a 100644
--- a/src/interfaces/ecpg/pgtypeslib/datetime.c
+++ b/src/interfaces/ecpg/pgtypeslib/datetime.c
@@ -678,7 +678,7 @@ PGTYPESdate_defmt_asc(date *d, char *fmt, char *str)
 		return -1;
 	}
 
-	if (tm.tm_mon < 1 || tm.tm_mon > 12)
+	if (tm.tm_mon < 1 || tm.tm_mon > MONTHS_PER_YEAR)
 	{
 		errno = PGTYPES_DATE_BAD_MONTH;
 		return -1;
diff --git a/src/interfaces/ecpg/pgtypeslib/dt.h b/src/interfaces/ecpg/pgtypeslib/dt.h
index c85a7cce683e662c2844b4859d04eae98e8a741b..cda880004568b5415d6e48b110d472f5539aa5dd 100644
--- a/src/interfaces/ecpg/pgtypeslib/dt.h
+++ b/src/interfaces/ecpg/pgtypeslib/dt.h
@@ -216,7 +216,17 @@ do { \
 } while(0)
 #endif
 
+/* in both timestamp.h and ecpg/dt.h */
+#define DAYS_PER_YEAR	365.25
+#define MONTHS_PER_YEAR	12
+/* average days per month */
+#define DAYS_PER_MONTH	30
+#define HOURS_PER_DAY	24
+
 #define SECS_PER_DAY	86400
+#define SECS_PER_HOUR   3600
+#define SECS_PER_MINUTE 60
+
 #ifdef HAVE_INT64_TIMESTAMP
 #define USECS_PER_DAY	INT64CONST(86400000000)
 #define USECS_PER_HOUR	INT64CONST(3600000000)
diff --git a/src/interfaces/ecpg/pgtypeslib/dt_common.c b/src/interfaces/ecpg/pgtypeslib/dt_common.c
index 617d7eef3e4ca9c0d2bed370a2c743748b9dfb01..65a70cdc874d36b2d39e07277158fb7c4b874039 100644
--- a/src/interfaces/ecpg/pgtypeslib/dt_common.c
+++ b/src/interfaces/ecpg/pgtypeslib/dt_common.c
@@ -688,7 +688,7 @@ DecodeSpecial(int field, char *lowtoken, int *val)
 int
 EncodeDateOnly(struct tm * tm, int style, char *str, bool EuroDates)
 {
-	if (tm->tm_mon < 1 || tm->tm_mon > 12)
+	if (tm->tm_mon < 1 || tm->tm_mon > MONTHS_PER_YEAR)
 		return -1;
 
 	switch (style)
@@ -813,8 +813,8 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
 			 */
 			if (tzp != NULL && tm->tm_isdst >= 0)
 			{
-				hour = -(*tzp / 3600);
-				min = (abs(*tzp) / 60) % 60;
+				hour = -(*tzp / SECS_PER_HOUR);
+				min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 				sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 			}
 			break;
@@ -861,8 +861,8 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
 					sprintf(str + strlen(str), " %.*s", MAXTZLEN, *tzn);
 				else
 				{
-					hour = -(*tzp / 3600);
-					min = (abs(*tzp) / 60) % 60;
+					hour = -(*tzp / SECS_PER_HOUR);
+					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 					sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 				}
 			}
@@ -907,8 +907,8 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
 					sprintf(str + strlen(str), " %.*s", MAXTZLEN, *tzn);
 				else
 				{
-					hour = -(*tzp / 3600);
-					min = (abs(*tzp) / 60) % 60;
+					hour = -(*tzp / SECS_PER_HOUR);
+					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 					sprintf(str + strlen(str), (min != 0) ? "%+03d:%02d" : "%+03d", hour, min);
 				}
 			}
@@ -970,8 +970,8 @@ EncodeDateTime(struct tm * tm, fsec_t fsec, int *tzp, char **tzn, int style, cha
 					 * rejected by the date/time parser later. - thomas
 					 * 2001-10-19
 					 */
-					hour = -(*tzp / 3600);
-					min = (abs(*tzp) / 60) % 60;
+					hour = -(*tzp / SECS_PER_HOUR);
+					min = (abs(*tzp) / SECS_PER_MINUTE) % SECS_PER_MINUTE;
 					sprintf(str + strlen(str), (min != 0) ? " %+03d:%02d" : " %+03d", hour, min);
 				}
 			}
@@ -1055,7 +1055,7 @@ abstime2tm(AbsoluteTime _time, int *tzp, struct tm * tm, char **tzn)
 #elif defined(HAVE_INT_TIMEZONE)
 	if (tzp != NULL)
 	{
-		*tzp = (tm->tm_isdst > 0) ? TIMEZONE_GLOBAL - 3600 : TIMEZONE_GLOBAL;
+		*tzp = (tm->tm_isdst > 0) ? TIMEZONE_GLOBAL - SECS_PER_HOUR : TIMEZONE_GLOBAL;
 
 		if (tzn != NULL)
 		{
@@ -1138,7 +1138,7 @@ DetermineLocalTimeZone(struct tm * tm)
 			/* tm_gmtoff is Sun/DEC-ism */
 			tz = -(tmp->tm_gmtoff);
 #elif defined(HAVE_INT_TIMEZONE)
-			tz = (tmp->tm_isdst > 0) ? TIMEZONE_GLOBAL - 3600 : TIMEZONE_GLOBAL;
+			tz = (tmp->tm_isdst > 0) ? TIMEZONE_GLOBAL - SECS_PER_HOUR : TIMEZONE_GLOBAL;
 #endif   /* HAVE_INT_TIMEZONE */
 		}
 		else
@@ -1161,7 +1161,7 @@ DetermineLocalTimeZone(struct tm * tm)
 
 			day = (date2j(tm->tm_year, tm->tm_mon, tm->tm_mday) -
 				   date2j(1970, 1, 1));
-			mysec = tm->tm_sec + (tm->tm_min + (day * 24 + tm->tm_hour) * 60) * 60;
+			mysec = tm->tm_sec + (tm->tm_min + (day * HOURS_PER_DAY + tm->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
 			mytime = (time_t) mysec;
 
 			/*
@@ -1171,7 +1171,7 @@ DetermineLocalTimeZone(struct tm * tm)
 			tmp = localtime(&mytime);
 			day = (date2j(tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday) -
 				   date2j(1970, 1, 1));
-			locsec = tmp->tm_sec + (tmp->tm_min + (day * 24 + tmp->tm_hour) * 60) * 60;
+			locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
 
 			/*
 			 * The local time offset corresponding to that GMT time is now
@@ -1201,7 +1201,7 @@ DetermineLocalTimeZone(struct tm * tm)
 			tmp = localtime(&mytime);
 			day = (date2j(tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday) -
 				   date2j(1970, 1, 1));
-			locsec = tmp->tm_sec + (tmp->tm_min + (day * 24 + tmp->tm_hour) * 60) * 60;
+			locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
 			delta2 = mysec - locsec;
 			if (delta2 != delta1)
 			{
@@ -1210,7 +1210,7 @@ DetermineLocalTimeZone(struct tm * tm)
 				tmp = localtime(&mytime);
 				day = (date2j(tmp->tm_year + 1900, tmp->tm_mon + 1, tmp->tm_mday) -
 					   date2j(1970, 1, 1));
-				locsec = tmp->tm_sec + (tmp->tm_min + (day * 24 + tmp->tm_hour) * 60) * 60;
+				locsec = tmp->tm_sec + (tmp->tm_min + (day * HOURS_PER_DAY + tmp->tm_hour) * SECS_PER_MINUTE) * SECS_PER_MINUTE;
 				delta2 = mysec - locsec;
 			}
 			tm->tm_isdst = tmp->tm_isdst;
@@ -1250,10 +1250,10 @@ dt2time(double jd, int *hour, int *min, int *sec, fsec_t *fsec)
 	*sec = time / USECS_PER_SEC;
 	*fsec = time - (*sec * USECS_PER_SEC);
 #else
-	*hour = time / 3600;
-	time -= (*hour) * 3600;
-	*min = time / 60;
-	time -= (*min) * 60;
+	*hour = time / SECS_PER_HOUR;
+	time -= (*hour) * SECS_PER_HOUR;
+	*min = time / SECS_PER_MINUTE;
+	time -= (*min) * SECS_PER_MINUTE;
 	*sec = time;
 	*fsec = JROUND(time - *sec);
 #endif
@@ -1437,7 +1437,7 @@ int *tmask, struct tm * tm, fsec_t *fsec, int *is2digits, bool EuroDates)
 	}
 
 	/* already have year? then could be month */
-	else if ((fmask & DTK_M(YEAR)) && !(fmask & DTK_M(MONTH)) && val >= 1 && val <= 12)
+	else if ((fmask & DTK_M(YEAR)) && !(fmask & DTK_M(MONTH)) && val >= 1 && val <= MONTHS_PER_YEAR)
 	{
 		*tmask = DTK_M(MONTH);
 		tm->tm_mon = val;
@@ -1450,7 +1450,7 @@ int *tmask, struct tm * tm, fsec_t *fsec, int *is2digits, bool EuroDates)
 		*tmask = DTK_M(DAY);
 		tm->tm_mday = val;
 	}
-	else if (!(fmask & DTK_M(MONTH)) && val >= 1 && val <= 12)
+	else if (!(fmask & DTK_M(MONTH)) && val >= 1 && val <= MONTHS_PER_YEAR)
 	{
 		*tmask = DTK_M(MONTH);
 		tm->tm_mon = val;
@@ -1712,7 +1712,7 @@ DecodeTimezone(char *str, int *tzp)
 	else
 		min = 0;
 
-	tz = (hr * 60 + min) * 60;
+	tz = (hr * SECS_PER_MINUTE + min) * SECS_PER_MINUTE;
 	if (*str == '-')
 		tz = -tz;
 
@@ -1752,7 +1752,7 @@ DecodePosixTimezone(char *str, int *tzp)
 	{
 		case DTZ:
 		case TZ:
-			*tzp = (val * 60) - tz;
+			*tzp = (val * SECS_PER_MINUTE) - tz;
 			break;
 
 		default:
@@ -2398,7 +2398,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return -1;
-						*tzp += val * 60;
+						*tzp += val * SECS_PER_MINUTE;
 						break;
 
 					case DTZ:
@@ -2411,7 +2411,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 1;
 						if (tzp == NULL)
 							return -1;
-						*tzp = val * 60;
+						*tzp = val * SECS_PER_MINUTE;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -2419,7 +2419,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
 						tm->tm_isdst = 0;
 						if (tzp == NULL)
 							return -1;
-						*tzp = val * 60;
+						*tzp = val * SECS_PER_MINUTE;
 						ftype[i] = DTK_TZ;
 						break;
 
@@ -3108,7 +3108,7 @@ PGTYPEStimestamp_defmt_scan(char **str, char *fmt, timestamp *d,
 						 * timezone value of the datetktbl table is in
 						 * quarter hours
 						 */
-						*tz = -15 * 60 * datetktbl[j].value;
+						*tz = -15 * SECS_PER_MINUTE * datetktbl[j].value;
 						break;
 					}
 				}
@@ -3167,7 +3167,7 @@ PGTYPEStimestamp_defmt_scan(char **str, char *fmt, timestamp *d,
 			err = 1;
 			*hour = 0;
 		}
-		if (*month > 12)
+		if (*month > MONTHS_PER_YEAR)
 		{
 			err = 1;
 			*month = 1;
diff --git a/src/interfaces/ecpg/pgtypeslib/interval.c b/src/interfaces/ecpg/pgtypeslib/interval.c
index 0f0eb8be16516a69e191a5f0e8b86fe77161f722..4d7ede931c8d38ace5f7d6079ab7ddb17ef752cc 100644
--- a/src/interfaces/ecpg/pgtypeslib/interval.c
+++ b/src/interfaces/ecpg/pgtypeslib/interval.c
@@ -254,7 +254,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm *tm, fsec
 						{
 							int			sec;
 
-							fval *= 60;
+							fval *= SECS_PER_MINUTE;
 							sec = fval;
 							tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
@@ -272,7 +272,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm *tm, fsec
 						{
 							int			sec;
 
-							fval *= 3600;
+							fval *= SECS_PER_HOUR;
 							sec = fval;
 							tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
@@ -326,7 +326,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm *tm, fsec
 						{
 							int			sec;
 
-							fval *= 30 * SECS_PER_DAY;
+							fval *= DAYS_PER_MONTH * SECS_PER_DAY;
 							sec = fval;
 							tm->tm_sec += sec;
 #ifdef HAVE_INT64_TIMESTAMP
@@ -341,28 +341,28 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm *tm, fsec
 					case DTK_YEAR:
 						tm->tm_year += val;
 						if (fval != 0)
-							tm->tm_mon += fval * 12;
+							tm->tm_mon += fval * MONTHS_PER_YEAR;
 						tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR);
 						break;
 
 					case DTK_DECADE:
 						tm->tm_year += val * 10;
 						if (fval != 0)
-							tm->tm_mon += fval * 120;
+							tm->tm_mon += fval * MONTHS_PER_YEAR * 10;
 						tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR);
 						break;
 
 					case DTK_CENTURY:
 						tm->tm_year += val * 100;
 						if (fval != 0)
-							tm->tm_mon += fval * 1200;
+							tm->tm_mon += fval * MONTHS_PER_YEAR * 100;
 						tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR);
 						break;
 
 					case DTK_MILLENNIUM:
 						tm->tm_year += val * 1000;
 						if (fval != 0)
-							tm->tm_mon += fval * 12000;
+							tm->tm_mon += fval * MONTHS_PER_YEAR * 1000;
 						tmask = (fmask & DTK_M(YEAR)) ? 0 : DTK_M(YEAR);
 						break;
 
@@ -680,8 +680,8 @@ interval2tm(interval span, struct tm *tm, fsec_t *fsec)
 
 	if (span.month != 0)
 	{
-		tm->tm_year = span.month / 12;
-		tm->tm_mon = span.month % 12;
+		tm->tm_year = span.month / MONTHS_PER_YEAR;
+		tm->tm_mon = span.month % MONTHS_PER_YEAR;
 
 	}
 	else
@@ -703,8 +703,8 @@ interval2tm(interval span, struct tm *tm, fsec_t *fsec)
 	*fsec = (time - (tm->tm_sec * USECS_PER_SEC));
 #else
 	TMODULO(time, tm->tm_mday, (double)SECS_PER_DAY);
-	TMODULO(time, tm->tm_hour, 3600.0);
-	TMODULO(time, tm->tm_min, 60.0);
+	TMODULO(time, tm->tm_hour, (double)SECS_PER_HOUR);
+	TMODULO(time, tm->tm_min, (double)SECS_PER_MINUTE);
 	TMODULO(time, tm->tm_sec, 1.0);
 	*fsec = time;
 #endif
@@ -715,16 +715,16 @@ interval2tm(interval span, struct tm *tm, fsec_t *fsec)
 static int
 tm2interval(struct tm *tm, fsec_t fsec, interval *span)
 {
-	span->month = tm->tm_year * 12 + tm->tm_mon;
+	span->month = tm->tm_year * MONTHS_PER_YEAR + tm->tm_mon;
 #ifdef HAVE_INT64_TIMESTAMP
-	span->time = (((((((tm->tm_mday * INT64CONST(24)) +
-						tm->tm_hour) * INT64CONST(60)) +
-					  	tm->tm_min) * INT64CONST(60)) +
+	span->time = (((((((tm->tm_mday * INT64CONST(HOURS_PER_DAY)) +
+						tm->tm_hour) * INT64CONST(SECS_PER_MINUTE)) +
+					  	tm->tm_min) * INT64CONST(SECS_PER_MINUTE)) +
 						tm->tm_sec) * USECS_PER_SEC) + fsec;
 #else
-	span->time = (((((tm->tm_mday * 24.0) +
-						tm->tm_hour) * 60.0) +
-						tm->tm_min) * 60.0) +
+	span->time = (((((tm->tm_mday * (double)HOURS_PER_DAY) +
+						tm->tm_hour) * (double)SECS_PER_MINUTE) +
+						tm->tm_min) * (double)SECS_PER_MINUTE) +
 						tm->tm_sec;
 	span->time = JROUND(span->time + fsec);
 #endif
diff --git a/src/interfaces/ecpg/pgtypeslib/timestamp.c b/src/interfaces/ecpg/pgtypeslib/timestamp.c
index 13bc33642de39145bb57152abe48ba2194829d10..5382022d71a3b7b4e19d0e27261bfd4d45a6b129 100644
--- a/src/interfaces/ecpg/pgtypeslib/timestamp.c
+++ b/src/interfaces/ecpg/pgtypeslib/timestamp.c
@@ -20,14 +20,14 @@ int PGTYPEStimestamp_defmt_scan(char **, char *, timestamp *, int *, int *, int
 static int64
 time2t(const int hour, const int min, const int sec, const fsec_t fsec)
 {
-	return (((((hour * 60) + min) * 60) + sec) * USECS_PER_SEC) + fsec;
+	return (((((hour * SECS_PER_MINUTE) + min) * SECS_PER_MINUTE) + sec) * USECS_PER_SEC) + fsec;
 }	/* time2t() */
 
 #else
 static double
 time2t(const int hour, const int min, const int sec, const fsec_t fsec)
 {
-	return (((hour * 60) + min) * 60) + sec + fsec;
+	return (((hour * SECS_PER_MINUTE) + min) * SECS_PER_MINUTE) + sec + fsec;
 }	/* time2t() */
 #endif
 
@@ -119,10 +119,10 @@ dt2time(timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec)
 	*sec = time / USECS_PER_SEC;
 	*fsec = time - *sec * USECS_PER_SEC;
 #else
-	*hour = time / 3600;
-	time -= (*hour) * 3600;
-	*min = time / 60;
-	time -= (*min) * 60;
+	*hour = time / SECS_PER_HOUR;
+	time -= (*hour) * SECS_PER_HOUR;
+	*min = time / SECS_PER_MINUTE;
+	time -= (*min) * SECS_PER_MINUTE;
 	*sec = time;
 	*fsec = JROUND(time - *sec);
 #endif
@@ -221,7 +221,7 @@ timestamp2tm(timestamp dt, int *tzp, struct tm * tm, fsec_t *fsec, char **tzn)
 			if (tzn != NULL)
 				*tzn = (char *) tm->tm_zone;
 #elif defined(HAVE_INT_TIMEZONE)
-			*tzp = (tm->tm_isdst > 0) ? TIMEZONE_GLOBAL - 3600 : TIMEZONE_GLOBAL;
+			*tzp = (tm->tm_isdst > 0) ? TIMEZONE_GLOBAL - SECS_PER_HOUR : TIMEZONE_GLOBAL;
 			if (tzn != NULL)
 				*tzn = TZNAME_GLOBAL[(tm->tm_isdst > 0)];
 #endif
@@ -875,15 +875,15 @@ PGTYPEStimestamp_add_interval(timestamp *tin, interval *span, timestamp *tout)
             if (timestamp2tm(*tin, NULL, tm, &fsec, NULL) !=0)
                 return -1;
             tm->tm_mon += span->month;
-            if (tm->tm_mon > 12)
+            if (tm->tm_mon > MONTHS_PER_YEAR)
             {
-                tm->tm_year += (tm->tm_mon - 1) / 12;
-                tm->tm_mon = (tm->tm_mon - 1) % 12 + 1;
+                tm->tm_year += (tm->tm_mon - 1) / MONTHS_PER_YEAR;
+                tm->tm_mon = (tm->tm_mon - 1) % MONTHS_PER_YEAR + 1;
             }
             else if (tm->tm_mon < 1)
             {
-                tm->tm_year += tm->tm_mon / 12 - 1;
-                tm->tm_mon = tm->tm_mon % 12 + 12;
+                tm->tm_year += tm->tm_mon / MONTHS_PER_YEAR - 1;
+                tm->tm_mon = tm->tm_mon % MONTHS_PER_YEAR + MONTHS_PER_YEAR;
             }