1# The day constants
2SUNDAY = 0
3MONDAY = 1
4TUESDAY = 2
5WEDNESDAY = 3
6THURSDAY = 4
7FRIDAY = 5
8SATURDAY = 6
9
10# Number of X in Y.
11YEARS_PER_CENTURY = 100
12YEARS_PER_DECADE = 10
13MONTHS_PER_YEAR = 12
14WEEKS_PER_YEAR = 52
15DAYS_PER_WEEK = 7
16HOURS_PER_DAY = 24
17MINUTES_PER_HOUR = 60
18SECONDS_PER_MINUTE = 60
19SECONDS_PER_HOUR = MINUTES_PER_HOUR * SECONDS_PER_MINUTE
20SECONDS_PER_DAY = HOURS_PER_DAY * SECONDS_PER_HOUR
21US_PER_SECOND = 1000000
22
23# Formats
24ATOM = "YYYY-MM-DDTHH:mm:ssZ"
25COOKIE = "dddd, DD-MMM-YYYY HH:mm:ss zz"
26ISO8601 = "YYYY-MM-DDTHH:mm:ssZ"
27ISO8601_EXTENDED = "YYYY-MM-DDTHH:mm:ss.SSSSSSZ"
28RFC822 = "ddd, DD MMM YY HH:mm:ss ZZ"
29RFC850 = "dddd, DD-MMM-YY HH:mm:ss zz"
30RFC1036 = "ddd, DD MMM YY HH:mm:ss ZZ"
31RFC1123 = "ddd, DD MMM YYYY HH:mm:ss ZZ"
32RFC2822 = "ddd, DD MMM YYYY HH:mm:ss ZZ"
33RFC3339 = ISO8601
34RFC3339_EXTENDED = ISO8601_EXTENDED
35RSS = "ddd, DD MMM YYYY HH:mm:ss ZZ"
36W3C = ISO8601
37
38
39EPOCH_YEAR = 1970
40
41DAYS_PER_N_YEAR = 365
42DAYS_PER_L_YEAR = 366
43
44USECS_PER_SEC = 1000000
45
46SECS_PER_MIN = 60
47SECS_PER_HOUR = 60 * SECS_PER_MIN
48SECS_PER_DAY = SECS_PER_HOUR * 24
49
50# 400-year chunks always have 146097 days (20871 weeks).
51SECS_PER_400_YEARS = 146097 * SECS_PER_DAY
52
53# The number of seconds in an aligned 100-year chunk, for those that
54# do not begin with a leap year and those that do respectively.
55SECS_PER_100_YEARS = (
56    (76 * DAYS_PER_N_YEAR + 24 * DAYS_PER_L_YEAR) * SECS_PER_DAY,
57    (75 * DAYS_PER_N_YEAR + 25 * DAYS_PER_L_YEAR) * SECS_PER_DAY,
58)
59
60# The number of seconds in an aligned 4-year chunk, for those that
61# do not begin with a leap year and those that do respectively.
62SECS_PER_4_YEARS = (
63    (4 * DAYS_PER_N_YEAR + 0 * DAYS_PER_L_YEAR) * SECS_PER_DAY,
64    (3 * DAYS_PER_N_YEAR + 1 * DAYS_PER_L_YEAR) * SECS_PER_DAY,
65)
66
67# The number of seconds in non-leap and leap years respectively.
68SECS_PER_YEAR = (DAYS_PER_N_YEAR * SECS_PER_DAY, DAYS_PER_L_YEAR * SECS_PER_DAY)
69
70DAYS_PER_YEAR = (DAYS_PER_N_YEAR, DAYS_PER_L_YEAR)
71
72# The month lengths in non-leap and leap years respectively.
73DAYS_PER_MONTHS = (
74    (-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
75    (-1, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
76)
77
78# The day offsets of the beginning of each (1-based) month in non-leap
79# and leap years respectively.
80# For example, in a leap year there are 335 days before December.
81MONTHS_OFFSETS = (
82    (-1, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365),
83    (-1, 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366),
84)
85
86DAY_OF_WEEK_TABLE = (0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4)
87
88TM_SUNDAY = 0
89TM_MONDAY = 1
90TM_TUESDAY = 2
91TM_WEDNESDAY = 3
92TM_THURSDAY = 4
93TM_FRIDAY = 5
94TM_SATURDAY = 6
95
96TM_JANUARY = 0
97TM_FEBRUARY = 1
98TM_MARCH = 2
99TM_APRIL = 3
100TM_MAY = 4
101TM_JUNE = 5
102TM_JULY = 6
103TM_AUGUST = 7
104TM_SEPTEMBER = 8
105TM_OCTOBER = 9
106TM_NOVEMBER = 10
107TM_DECEMBER = 11
108