mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
More macro cleanups for date/time.
This commit is contained in:
@@ -22,10 +22,10 @@ PGTYPESdate_from_timestamp(timestamp dt)
|
||||
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
/* Microseconds to days */
|
||||
dDate = (dt / INT64CONST(86400000000));
|
||||
dDate = (dt / USECS_PER_DAY);
|
||||
#else
|
||||
/* Seconds to days */
|
||||
dDate = (dt / 86400.0);
|
||||
dDate = (dt / (double)SECS_PER_DAY);
|
||||
#endif
|
||||
|
||||
return dDate;
|
||||
|
@@ -216,6 +216,14 @@ do { \
|
||||
} while(0)
|
||||
#endif
|
||||
|
||||
#define SECS_PER_DAY 86400
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
#define USECS_PER_DAY INT64CONST(86400000000)
|
||||
#define USECS_PER_HOUR INT64CONST(3600000000)
|
||||
#define USECS_PER_MINUTE INT64CONST(60000000)
|
||||
#define USECS_PER_SEC INT64CONST(1000000)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Date/time validation
|
||||
* Include check for leap year.
|
||||
|
@@ -1246,12 +1246,12 @@ dt2time(double jd, int *hour, int *min, int *sec, fsec_t *fsec)
|
||||
|
||||
time = jd;
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
*hour = (time / INT64CONST(3600000000));
|
||||
time -= ((*hour) * INT64CONST(3600000000));
|
||||
*min = (time / INT64CONST(60000000));
|
||||
time -= ((*min) * INT64CONST(60000000));
|
||||
*sec = (time / INT64CONST(1000000));
|
||||
*fsec = (time - (*sec * INT64CONST(1000000)));
|
||||
*hour = (time / USECS_PER_HOUR);
|
||||
time -= ((*hour) * USECS_PER_HOUR);
|
||||
*min = (time / USECS_PER_MINUTE);
|
||||
time -= ((*min) * USECS_PER_MINUTE);
|
||||
*sec = (time / USECS_PER_SEC);
|
||||
*fsec = (time - (*sec * USECS_PER_SEC));
|
||||
#else
|
||||
*hour = (time / 3600);
|
||||
time -= ((*hour) * 3600);
|
||||
@@ -1675,7 +1675,7 @@ DecodeTime(char *str, int fmask, int *tmask, struct tm * tm, fsec_t *fsec)
|
||||
if ((tm->tm_hour < 0)
|
||||
|| (tm->tm_min < 0) || (tm->tm_min > 59)
|
||||
|| (tm->tm_sec < 0) || (tm->tm_sec > 59)
|
||||
|| (*fsec >= INT64CONST(1000000)))
|
||||
|| (*fsec >= USECS_PER_SEC))
|
||||
return -1;
|
||||
#else
|
||||
if ((tm->tm_hour < 0)
|
||||
@@ -2257,7 +2257,7 @@ DecodeDateTime(char **field, int *ftype, int nf,
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
dt2time((time * USECS_PER_DAY), &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec);
|
||||
#else
|
||||
dt2time((time * 86400), &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec);
|
||||
dt2time((time * SECS_PER_DAY), &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
@@ -88,7 +88,7 @@ DecodeTime(char *str, int fmask, int *tmask, struct tm * tm, fsec_t *fsec)
|
||||
if ((tm->tm_hour < 0)
|
||||
|| (tm->tm_min < 0) || (tm->tm_min > 59)
|
||||
|| (tm->tm_sec < 0) || (tm->tm_sec > 59)
|
||||
|| (*fsec >= INT64CONST(1000000)))
|
||||
|| (*fsec >= USECS_PER_SEC))
|
||||
return -1;
|
||||
#else
|
||||
if ((tm->tm_hour < 0)
|
||||
@@ -296,7 +296,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm * tm, fse
|
||||
{
|
||||
int sec;
|
||||
|
||||
fval *= 86400;
|
||||
fval *= SECS_PER_DAY;
|
||||
sec = fval;
|
||||
tm->tm_sec += sec;
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
@@ -314,7 +314,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm * tm, fse
|
||||
{
|
||||
int sec;
|
||||
|
||||
fval *= (7 * 86400);
|
||||
fval *= (7 * SECS_PER_DAY);
|
||||
sec = fval;
|
||||
tm->tm_sec += sec;
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
@@ -332,7 +332,7 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm * tm, fse
|
||||
{
|
||||
int sec;
|
||||
|
||||
fval *= (30 * 86400);
|
||||
fval *= (30 * SECS_PER_DAY);
|
||||
sec = fval;
|
||||
tm->tm_sec += sec;
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
@@ -419,8 +419,8 @@ DecodeInterval(char **field, int *ftype, int nf, int *dtype, struct tm * tm, fse
|
||||
int sec;
|
||||
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
sec = (*fsec / INT64CONST(1000000));
|
||||
*fsec -= (sec * INT64CONST(1000000));
|
||||
sec = (*fsec / USECS_PER_SEC);
|
||||
*fsec -= (sec * USECS_PER_SEC);
|
||||
#else
|
||||
TMODULO(*fsec, sec, 1e0);
|
||||
#endif
|
||||
@@ -702,14 +702,14 @@ interval2tm(interval span, struct tm * tm, fsec_t *fsec)
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
tm->tm_mday = (time / USECS_PER_DAY);
|
||||
time -= (tm->tm_mday * USECS_PER_DAY);
|
||||
tm->tm_hour = (time / INT64CONST(3600000000));
|
||||
time -= (tm->tm_hour * INT64CONST(3600000000));
|
||||
tm->tm_min = (time / INT64CONST(60000000));
|
||||
time -= (tm->tm_min * INT64CONST(60000000));
|
||||
tm->tm_sec = (time / INT64CONST(1000000));
|
||||
*fsec = (time - (tm->tm_sec * INT64CONST(1000000)));
|
||||
tm->tm_hour = (time / USECS_PER_HOUR);
|
||||
time -= (tm->tm_hour * USECS_PER_HOUR);
|
||||
tm->tm_min = (time / USECS_PER_MINUTE);
|
||||
time -= (tm->tm_min * USECS_PER_MINUTE);
|
||||
tm->tm_sec = (time / USECS_PER_SEC);
|
||||
*fsec = (time - (tm->tm_sec * USECS_PER_SEC));
|
||||
#else
|
||||
TMODULO(time, tm->tm_mday, 86400e0);
|
||||
TMODULO(time, tm->tm_mday, (double)SECS_PER_DAY);
|
||||
TMODULO(time, tm->tm_hour, 3600e0);
|
||||
TMODULO(time, tm->tm_min, 60e0);
|
||||
TMODULO(time, tm->tm_sec, 1e0);
|
||||
@@ -727,7 +727,7 @@ tm2interval(struct tm * tm, fsec_t fsec, interval *span)
|
||||
span->time = ((((((((tm->tm_mday * INT64CONST(24))
|
||||
+ tm->tm_hour) * INT64CONST(60))
|
||||
+ tm->tm_min) * INT64CONST(60))
|
||||
+ tm->tm_sec) * INT64CONST(1000000)) + fsec);
|
||||
+ tm->tm_sec) * USECS_PER_SEC) + fsec);
|
||||
#else
|
||||
span->time = ((((((tm->tm_mday * 24.0)
|
||||
+ tm->tm_hour) * 60.0)
|
||||
|
@@ -20,7 +20,7 @@ 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) * INT64CONST(1000000)) + fsec);
|
||||
return ((((((hour * 60) + min) * 60) + sec) * USECS_PER_SEC) + fsec);
|
||||
} /* time2t() */
|
||||
|
||||
#else
|
||||
@@ -35,7 +35,7 @@ static timestamp
|
||||
dt2local(timestamp dt, int tz)
|
||||
{
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
dt -= (tz * INT64CONST(1000000));
|
||||
dt -= (tz * USECS_PER_SEC);
|
||||
#else
|
||||
dt -= tz;
|
||||
dt = JROUND(dt);
|
||||
@@ -77,7 +77,7 @@ tm2timestamp(struct tm * tm, fsec_t fsec, int *tzp, timestamp *result)
|
||||
if ((*result < 0) ? (dDate >= 0) : (dDate < 0))
|
||||
return -1;
|
||||
#else
|
||||
*result = ((dDate * 86400) + time);
|
||||
*result = ((dDate * SECS_PER_DAY) + time);
|
||||
#endif
|
||||
if (tzp != NULL)
|
||||
*result = dt2local(*result, -(*tzp));
|
||||
@@ -110,14 +110,14 @@ dt2time(timestamp jd, int *hour, int *min, int *sec, fsec_t *fsec)
|
||||
time = jd;
|
||||
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
*hour = (time / INT64CONST(3600000000));
|
||||
time -= ((*hour) * INT64CONST(3600000000));
|
||||
*min = (time / INT64CONST(60000000));
|
||||
time -= ((*min) * INT64CONST(60000000));
|
||||
*sec = (time / INT64CONST(1000000));
|
||||
*fsec = (time - (*sec * INT64CONST(1000000)));
|
||||
*sec = (time / INT64CONST(1000000));
|
||||
*fsec = (time - (*sec * INT64CONST(1000000)));
|
||||
*hour = (time / USECS_PER_HOUR);
|
||||
time -= ((*hour) * USECS_PER_HOUR);
|
||||
*min = (time / USECS_PER_MINUTE);
|
||||
time -= ((*min) * USECS_PER_MINUTE);
|
||||
*sec = (time / USECS_PER_SEC);
|
||||
*fsec = (time - (*sec * USECS_PER_SEC));
|
||||
*sec = (time / USECS_PER_SEC);
|
||||
*fsec = (time - (*sec * USECS_PER_SEC));
|
||||
#else
|
||||
*hour = (time / 3600);
|
||||
time -= ((*hour) * 3600);
|
||||
@@ -171,11 +171,11 @@ timestamp2tm(timestamp dt, int *tzp, struct tm * tm, fsec_t *fsec, char **tzn)
|
||||
dDate -= 1;
|
||||
}
|
||||
#else
|
||||
TMODULO(time, dDate, 86400e0);
|
||||
TMODULO(time, dDate, (double)SECS_PER_DAY);
|
||||
|
||||
if (time < 0)
|
||||
{
|
||||
time += 86400;
|
||||
time += SECS_PER_DAY;
|
||||
dDate -= 1;
|
||||
}
|
||||
#endif
|
||||
@@ -199,10 +199,10 @@ timestamp2tm(timestamp dt, int *tzp, struct tm * tm, fsec_t *fsec, char **tzn)
|
||||
if (IS_VALID_UTIME(tm->tm_year, tm->tm_mon, tm->tm_mday))
|
||||
{
|
||||
#ifdef HAVE_INT64_TIMESTAMP
|
||||
utime = ((dt / INT64CONST(1000000))
|
||||
+ ((date0 - date2j(1970, 1, 1)) * INT64CONST(86400)));
|
||||
utime = ((dt / USECS_PER_SEC)
|
||||
+ ((date0 - date2j(1970, 1, 1)) * INT64CONST(SECS_PER_DAY)));
|
||||
#else
|
||||
utime = (dt + ((date0 - date2j(1970, 1, 1)) * 86400));
|
||||
utime = (dt + ((date0 - date2j(1970, 1, 1)) * SECS_PER_DAY));
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_TM_ZONE) || defined(HAVE_INT_TIMEZONE)
|
||||
|
Reference in New Issue
Block a user