Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Doc/library/datetime.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2584,7 +2584,7 @@ requires, and these work on all supported platforms.
| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), |
| | decimal number. | | \(9) |
+-----------+--------------------------------+------------------------+-------+
| ``%t`` | The tab character | ``\t`` | \(0) |
| ``%t`` | The tab character | ``\t`` | |
| | (``'\t'``). | | |
+-----------+--------------------------------+------------------------+-------+
| ``%T`` | ISO 8601 time format, | 10:01:59 | |
Expand Down Expand Up @@ -2676,7 +2676,8 @@ differences between platforms in handling of unsupported format specifiers.
``%:z`` was added for :meth:`~.datetime.strftime`.

.. versionadded:: 3.15
``%:z``, ``%F``, and ``%D`` were added for :meth:`~.datetime.strptime`.
``%:z``, ``%F``, ``%D``, and ``%t`` were added for
:meth:`~.datetime.strptime`.

Technical Detail
^^^^^^^^^^^^^^^^
Expand Down
4 changes: 3 additions & 1 deletion Lib/_strptime.py
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,9 @@ def __init__(self, locale_time=None):
'Z': self.__seqToRE((tz for tz_names in self.locale_time.timezone
for tz in tz_names),
'Z'),
'%': '%'}
't': '\t',
'%': '%'
}
if self.locale_time.LC_alt_digits is None:
for d in 'dmyCHIMS':
mapping['O' + d] = r'(?P<%s>\d\d|\d| \d)' % d
Expand Down
7 changes: 7 additions & 0 deletions Lib/test/datetimetester.py
Original file line number Diff line number Diff line change
Expand Up @@ -2207,6 +2207,13 @@ def test_strptime_D_format(self):
self.theclass.strptime(test_date, "%m/%d/%y")
)

def test_strptime_t_format(self):
test_date = "2026\t02\t16"
self.assertEqual(
self.theclass.strptime(test_date, "%Y%t%m%t%d"),
self.theclass.strptime(test_date, "%Y\t%m\t%d")
)


#############################################################################
# datetime tests
Expand Down
7 changes: 7 additions & 0 deletions Lib/test/test_strptime.py
Original file line number Diff line number Diff line change
Expand Up @@ -670,6 +670,13 @@ def test_strptime_D_format(self):
time.strptime(test_date, "%m/%d/%y")
)

def test_strptime_t_format(self):
test_date = "2026\t02\t16"
self.assertEqual(
time.strptime(test_date, "%Y%t%m%t%d"),
time.strptime(test_date, "%Y\t%m\t%d")
)

class Strptime12AMPMTests(unittest.TestCase):
"""Test a _strptime regression in '%I %p' at 12 noon (12 PM)"""

Expand Down
2 changes: 1 addition & 1 deletion Lib/test/test_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ def test_strptime(self):
# raising an exception.
tt = time.gmtime(self.t)
for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'D', 'F', 'H', 'I',
'j', 'm', 'M', 'p', 'S', 'T',
'j', 'm', 'M', 'p', 'S', 't', 'T',
'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
format = '%' + directive
if directive == 'd':
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add ``'%t'`` support to :meth:`~datetime.datetime.strptime`.
Loading