#include <stdio.h>
#include <ctype.h>
+#include <stdlib.h>
#define ISSPACE(c) (isspace ((unsigned char)c))
#define ISALPHA(c) (isalpha ((unsigned char)c))
;
number : tUNUMBER
- {
+ {
if (yyHaveTime && yyHaveDate && !yyHaveRel)
yyYear = $1;
else
}
else
{
- yyHour = $1 / 100;
- yyMinutes = $1 % 100;
+ yyHour = $1 / 100;
+ yyMinutes = $1 % 100;
}
yySeconds = 0;
yyMeridian = MER24;
#define TM_YEAR_ORIGIN 1900
+#ifndef GETDATE_IGNORE_TIMEZONE
+
/* Yield A - B, measured in seconds. */
static long
difftm (a, b)
+ (a->tm_sec - b->tm_sec));
}
+#endif
+
time_t
get_date (p, now)
const char *p;
{
/* Guard against falsely reporting errors near the time_t boundaries
- when parsing times in other time zones. For example, if the min
- time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead
- of UTC, then the min localtime value is 1970-01-01 08:00:00; if
- we apply mktime to 1970-01-01 00:00:00 we will get an error, so
- we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
- zone by 24 hours to compensate. This algorithm assumes that
- there is no DST transition within a day of the time_t boundaries. */
-
+ when parsing times in other time zones. For example, if the min
+ time_t value is 1970-01-01 00:00:00 UTC and we are 8 hours ahead
+ of UTC, then the min localtime value is 1970-01-01 08:00:00; if
+ we apply mktime to 1970-01-01 00:00:00 we will get an error, so
+ we apply mktime to 1970-01-02 08:00:00 instead and adjust the time
+ zone by 24 hours to compensate. This algorithm assumes that
+ there is no DST transition within a day of the time_t boundaries. */
+
+#ifndef GETDATE_IGNORE_TIMEZONE
if (yyHaveZone)
{
tm = tm0;
}
Start = mktime (&tm);
}
+#endif
if (Start == (time_t) -1)
return Start;
return Start;
}
+#ifndef GETDATE_IGNORE_TIMEZONE
if (yyHaveZone)
{
long delta = yyTimezone * 60L + difftm (&tm, gmtime (&Start));
return -1; /* time_t overflow */
Start += delta;
}
+#endif
return Start;
}