1 /*------------------------------------------------------------------------- 2 * 3 * pgtime.h 4 * PostgreSQL internal timezone library 5 * 6 * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group 7 * 8 * IDENTIFICATION 9 * src/include/pgtime.h 10 * 11 *------------------------------------------------------------------------- 12 */ 13 #ifndef _PGTIME_H 14 #define _PGTIME_H 15 16 17 /* 18 * The API of this library is generally similar to the corresponding 19 * C library functions, except that we use pg_time_t which (we hope) is 20 * 64 bits wide, and which is most definitely signed not unsigned. 21 */ 22 23 typedef int64 pg_time_t; 24 25 struct pg_tm 26 { 27 int tm_sec; 28 int tm_min; 29 int tm_hour; 30 int tm_mday; 31 int tm_mon; /* origin 1, not 0! */ 32 int tm_year; /* relative to 1900 */ 33 int tm_wday; 34 int tm_yday; 35 int tm_isdst; 36 long int tm_gmtoff; 37 const char *tm_zone; 38 }; 39 40 typedef struct pg_tz pg_tz; 41 typedef struct pg_tzenum pg_tzenum; 42 43 /* Maximum length of a timezone name (not including trailing null) */ 44 #define TZ_STRLEN_MAX 255 45 46 /* these functions are in localtime.c */ 47 48 extern struct pg_tm *pg_localtime(const pg_time_t *timep, const pg_tz *tz); 49 extern struct pg_tm *pg_gmtime(const pg_time_t *timep); 50 extern int pg_next_dst_boundary(const pg_time_t *timep, 51 long int *before_gmtoff, 52 int *before_isdst, 53 pg_time_t *boundary, 54 long int *after_gmtoff, 55 int *after_isdst, 56 const pg_tz *tz); 57 extern bool pg_interpret_timezone_abbrev(const char *abbrev, 58 const pg_time_t *timep, 59 long int *gmtoff, 60 int *isdst, 61 const pg_tz *tz); 62 extern bool pg_get_timezone_offset(const pg_tz *tz, long int *gmtoff); 63 extern const char *pg_get_timezone_name(pg_tz *tz); 64 extern bool pg_tz_acceptable(pg_tz *tz); 65 66 /* these functions are in strftime.c */ 67 68 extern size_t pg_strftime(char *s, size_t max, const char *format, 69 const struct pg_tm *tm); 70 71 /* these functions and variables are in pgtz.c */ 72 73 extern PGDLLIMPORT pg_tz *session_timezone; 74 extern pg_tz *log_timezone; 75 76 extern void pg_timezone_initialize(void); 77 extern pg_tz *pg_tzset(const char *tzname); 78 extern pg_tz *pg_tzset_offset(long gmtoffset); 79 80 extern pg_tzenum *pg_tzenumerate_start(void); 81 extern pg_tz *pg_tzenumerate_next(pg_tzenum *dir); 82 extern void pg_tzenumerate_end(pg_tzenum *dir); 83 84 #endif /* _PGTIME_H */ 85