1 /*-------------------------------------------------------------------------
2  *
3  * pgtime.h
4  *	  PostgreSQL internal timezone library
5  *
6  * Portions Copyright (c) 1996-2017, 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