mirror of https://github.com/python/cpython
Closes bpo-28281: Remove year (1-9999) limits on the weekday() function. (#4109)
Patch by Mark Gollahon.
This commit is contained in:
parent
52ad72dd0a
commit
66c88ce30c
|
@ -19,11 +19,13 @@ the week to Sunday (6) or to any other weekday. Parameters that specify dates
|
|||
are given as integers. For related
|
||||
functionality, see also the :mod:`datetime` and :mod:`time` modules.
|
||||
|
||||
Most of these functions and classes rely on the :mod:`datetime` module which
|
||||
uses an idealized calendar, the current Gregorian calendar extended
|
||||
The functions and classes defined in this module
|
||||
use an idealized calendar, the current Gregorian calendar extended indefinitely
|
||||
in both directions. This matches the definition of the "proleptic Gregorian"
|
||||
calendar in Dershowitz and Reingold's book "Calendrical Calculations", where
|
||||
it's the base calendar for all computations.
|
||||
it's the base calendar for all computations. Zero and negative years are
|
||||
interpreted as prescribed by the ISO 8601 standard. Year 0 is 1 BC, year -1 is
|
||||
2 BC, and so on.
|
||||
|
||||
|
||||
.. class:: Calendar(firstweekday=0)
|
||||
|
|
|
@ -111,8 +111,9 @@ def leapdays(y1, y2):
|
|||
|
||||
|
||||
def weekday(year, month, day):
|
||||
"""Return weekday (0-6 ~ Mon-Sun) for year (1970-...), month (1-12),
|
||||
day (1-31)."""
|
||||
"""Return weekday (0-6 ~ Mon-Sun) for year, month (1-12), day (1-31)."""
|
||||
if not datetime.MINYEAR <= year <= datetime.MAXYEAR:
|
||||
year = 2000 + year % 400
|
||||
return datetime.date(year, month, day).weekday()
|
||||
|
||||
|
||||
|
|
|
@ -9,6 +9,56 @@ import sys
|
|||
import datetime
|
||||
import os
|
||||
|
||||
# From https://en.wikipedia.org/wiki/Leap_year_starting_on_Saturday
|
||||
result_0_02_text = """\
|
||||
February 0
|
||||
Mo Tu We Th Fr Sa Su
|
||||
1 2 3 4 5 6
|
||||
7 8 9 10 11 12 13
|
||||
14 15 16 17 18 19 20
|
||||
21 22 23 24 25 26 27
|
||||
28 29
|
||||
"""
|
||||
|
||||
result_0_text = """\
|
||||
0
|
||||
|
||||
January February March
|
||||
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
|
||||
1 2 1 2 3 4 5 6 1 2 3 4 5
|
||||
3 4 5 6 7 8 9 7 8 9 10 11 12 13 6 7 8 9 10 11 12
|
||||
10 11 12 13 14 15 16 14 15 16 17 18 19 20 13 14 15 16 17 18 19
|
||||
17 18 19 20 21 22 23 21 22 23 24 25 26 27 20 21 22 23 24 25 26
|
||||
24 25 26 27 28 29 30 28 29 27 28 29 30 31
|
||||
31
|
||||
|
||||
April May June
|
||||
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
|
||||
1 2 1 2 3 4 5 6 7 1 2 3 4
|
||||
3 4 5 6 7 8 9 8 9 10 11 12 13 14 5 6 7 8 9 10 11
|
||||
10 11 12 13 14 15 16 15 16 17 18 19 20 21 12 13 14 15 16 17 18
|
||||
17 18 19 20 21 22 23 22 23 24 25 26 27 28 19 20 21 22 23 24 25
|
||||
24 25 26 27 28 29 30 29 30 31 26 27 28 29 30
|
||||
|
||||
July August September
|
||||
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
|
||||
1 2 1 2 3 4 5 6 1 2 3
|
||||
3 4 5 6 7 8 9 7 8 9 10 11 12 13 4 5 6 7 8 9 10
|
||||
10 11 12 13 14 15 16 14 15 16 17 18 19 20 11 12 13 14 15 16 17
|
||||
17 18 19 20 21 22 23 21 22 23 24 25 26 27 18 19 20 21 22 23 24
|
||||
24 25 26 27 28 29 30 28 29 30 31 25 26 27 28 29 30
|
||||
31
|
||||
|
||||
October November December
|
||||
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
|
||||
1 1 2 3 4 5 1 2 3
|
||||
2 3 4 5 6 7 8 6 7 8 9 10 11 12 4 5 6 7 8 9 10
|
||||
9 10 11 12 13 14 15 13 14 15 16 17 18 19 11 12 13 14 15 16 17
|
||||
16 17 18 19 20 21 22 20 21 22 23 24 25 26 18 19 20 21 22 23 24
|
||||
23 24 25 26 27 28 29 27 28 29 30 25 26 27 28 29 30 31
|
||||
30 31
|
||||
"""
|
||||
|
||||
result_2004_01_text = """\
|
||||
January 2004
|
||||
Mo Tu We Th Fr Sa Su
|
||||
|
@ -343,12 +393,20 @@ class OutputTestCase(unittest.TestCase):
|
|||
self.normalize_calendar(calendar.calendar(2004)),
|
||||
self.normalize_calendar(result_2004_text)
|
||||
)
|
||||
self.assertEqual(
|
||||
self.normalize_calendar(calendar.calendar(0)),
|
||||
self.normalize_calendar(result_0_text)
|
||||
)
|
||||
|
||||
def test_output_textcalendar(self):
|
||||
self.assertEqual(
|
||||
calendar.TextCalendar().formatyear(2004),
|
||||
result_2004_text
|
||||
)
|
||||
self.assertEqual(
|
||||
calendar.TextCalendar().formatyear(0),
|
||||
result_0_text
|
||||
)
|
||||
|
||||
def test_output_htmlcalendar_encoding_ascii(self):
|
||||
self.check_htmlcalendar_encoding('ascii', 'ascii')
|
||||
|
@ -393,6 +451,10 @@ class OutputTestCase(unittest.TestCase):
|
|||
calendar.TextCalendar().formatmonth(2004, 1),
|
||||
result_2004_01_text
|
||||
)
|
||||
self.assertEqual(
|
||||
calendar.TextCalendar().formatmonth(0, 2),
|
||||
result_0_02_text
|
||||
)
|
||||
|
||||
def test_formatmonthname_with_year(self):
|
||||
self.assertEqual(
|
||||
|
|
|
@ -545,6 +545,7 @@ Karan Goel
|
|||
Jeroen Van Goey
|
||||
Christoph Gohlke
|
||||
Tim Golden
|
||||
Mark Gollahon
|
||||
Guilherme Gonçalves
|
||||
Tiago Gonçalves
|
||||
Chris Gonnerman
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Remove year (1-9999) limits on the Calendar.weekday() function.
|
||||
|
||||
Patch by Mark Gollahon.
|
Loading…
Reference in New Issue