tzfile.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2004 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /* 
  14.    This file is based on public domain code from ftp://elsie.ncih.nist.gov/
  15.    Initial source code is in the public domain, so clarified as of
  16.    1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov). 
  17. */
  18. /*
  19.   Information about time zone files.
  20. */
  21. #ifndef TZDIR
  22. #define TZDIR "/usr/share/zoneinfo" /* Time zone object file directory */
  23. #endif /* !defined TZDIR */
  24. /*
  25.   Each file begins with. . .
  26. */
  27. #define TZ_MAGIC "TZif"
  28. struct tzhead {
  29.   char tzh_magic[4]; /* TZ_MAGIC */
  30. char tzh_reserved[16]; /* reserved for future use */
  31. char tzh_ttisgmtcnt[4]; /* coded number of trans. time flags */
  32. char tzh_ttisstdcnt[4]; /* coded number of trans. time flags */
  33. char tzh_leapcnt[4]; /* coded number of leap seconds */
  34. char tzh_timecnt[4]; /* coded number of transition times */
  35. char tzh_typecnt[4]; /* coded number of local time types */
  36. char tzh_charcnt[4]; /* coded number of abbr. chars */
  37. };
  38. /*
  39.   . . .followed by. . .
  40.   
  41.   tzh_timecnt (char [4])s               coded transition times a la time(2)
  42.   tzh_timecnt (unsigned char)s          types of local time starting at above
  43.   tzh_typecnt repetitions of
  44.     one (char [4])                      coded UTC offset in seconds
  45.     one (unsigned char)                 used to set tm_isdst
  46.     one (unsigned char)                 that's an abbreviation list index
  47.   tzh_charcnt (char)s                   ''-terminated zone abbreviations
  48.   tzh_leapcnt repetitions of
  49.     one (char [4])                      coded leap second transition times
  50.     one (char [4])                      total correction after above
  51.   tzh_ttisstdcnt (char)s                indexed by type; if TRUE, transition
  52.                                         time is standard time, if FALSE,
  53.                                         transition time is wall clock time
  54.                                         if absent, transition times are
  55.                                         assumed to be wall clock time
  56.   tzh_ttisgmtcnt (char)s                indexed by type; if TRUE, transition
  57.                                         time is UTC, if FALSE,
  58.                                         transition time is local time
  59.                                         if absent, transition times are
  60.                                         assumed to be local time
  61. */
  62. /*
  63.   In the current implementation, we refuse to deal with files that
  64.   exceed any of the limits below.
  65. */
  66. #ifndef TZ_MAX_TIMES
  67. /*
  68.   The TZ_MAX_TIMES value below is enough to handle a bit more than a
  69.   year's worth of solar time (corrected daily to the nearest second) or
  70.   138 years of Pacific Presidential Election time
  71.   (where there are three time zone transitions every fourth year).
  72. */
  73. #define TZ_MAX_TIMES 370
  74. #endif /* !defined TZ_MAX_TIMES */
  75. #ifndef TZ_MAX_TYPES
  76. #ifdef SOLAR
  77. #define TZ_MAX_TYPES 256 /* Limited by what (unsigned char)'s can hold */
  78. #else
  79. /*
  80.   Must be at least 14 for Europe/Riga as of Jan 12 1995,
  81.   as noted by Earl Chew <earl@hpato.aus.hp.com>.
  82. */
  83. #define TZ_MAX_TYPES 20 /* Maximum number of local time types */
  84. #endif /* defined SOLAR */
  85. #endif /* !defined TZ_MAX_TYPES */
  86. #ifndef TZ_MAX_CHARS
  87. #define TZ_MAX_CHARS 50 /* Maximum number of abbreviation characters */
  88. /* (limited by what unsigned chars can hold) */
  89. #endif /* !defined TZ_MAX_CHARS */
  90. #ifndef TZ_MAX_LEAPS
  91. #define TZ_MAX_LEAPS 50 /* Maximum number of leap second corrections */
  92. #endif /* !defined TZ_MAX_LEAPS */
  93. #ifndef TZ_MAX_REV_RANGES
  94. #ifdef SOLAR
  95. /* Solar (Asia/RiyadhXX) zones need significantly bigger TZ_MAX_REV_RANGES */
  96. #define TZ_MAX_REV_RANGES (TZ_MAX_TIMES*2+TZ_MAX_LEAPS*2+2)
  97. #else
  98. #define TZ_MAX_REV_RANGES (TZ_MAX_TIMES+TZ_MAX_LEAPS+2)
  99. #endif
  100. #endif
  101. #define SECS_PER_MIN 60
  102. #define MINS_PER_HOUR 60
  103. #define HOURS_PER_DAY 24
  104. #define DAYS_PER_WEEK 7
  105. #define DAYS_PER_NYEAR 365
  106. #define DAYS_PER_LYEAR 366
  107. #define SECS_PER_HOUR (SECS_PER_MIN * MINS_PER_HOUR)
  108. #define SECS_PER_DAY ((long) SECS_PER_HOUR * HOURS_PER_DAY)
  109. #define MONS_PER_YEAR 12
  110. #define TM_YEAR_BASE 1900
  111. #define EPOCH_YEAR 1970
  112. /*
  113.   Accurate only for the past couple of centuries,
  114.   that will probably do.
  115. */
  116. #define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))