constants.py 2.7 KB

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