mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
gh-69142: add %:z strftime format code (gh-95983)
datetime.isoformat generates the tzoffset with colons, but there was no format code to make strftime output the same format. for simplicity and consistency the %:z formatting behaves mostly as %z, with the exception of adding colons. this includes the dynamic behaviour of adding seconds and microseconds only when needed (when not 0). this fixes the still open "generate" part of this issue: https://github.com/python/cpython/issues/69142 Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
This commit is contained in:
parent
e860e521ec
commit
023c51d9d8
5 changed files with 92 additions and 55 deletions
|
@ -1463,8 +1463,8 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
|
|||
# test that unicode input is allowed (issue 2782)
|
||||
self.assertEqual(t.strftime("%m"), "03")
|
||||
|
||||
# A naive object replaces %z and %Z w/ empty strings.
|
||||
self.assertEqual(t.strftime("'%z' '%Z'"), "'' ''")
|
||||
# A naive object replaces %z, %:z and %Z w/ empty strings.
|
||||
self.assertEqual(t.strftime("'%z' '%:z' '%Z'"), "'' '' ''")
|
||||
|
||||
#make sure that invalid format specifiers are handled correctly
|
||||
#self.assertRaises(ValueError, t.strftime, "%e")
|
||||
|
@ -1528,7 +1528,7 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
|
|||
|
||||
for fmt in ["m:%m d:%d y:%y",
|
||||
"m:%m d:%d y:%y H:%H M:%M S:%S",
|
||||
"%z %Z",
|
||||
"%z %:z %Z",
|
||||
]:
|
||||
self.assertEqual(dt.__format__(fmt), dt.strftime(fmt))
|
||||
self.assertEqual(a.__format__(fmt), dt.strftime(fmt))
|
||||
|
@ -2134,7 +2134,7 @@ class TestDateTime(TestDate):
|
|||
|
||||
for fmt in ["m:%m d:%d y:%y",
|
||||
"m:%m d:%d y:%y H:%H M:%M S:%S",
|
||||
"%z %Z",
|
||||
"%z %:z %Z",
|
||||
]:
|
||||
self.assertEqual(dt.__format__(fmt), dt.strftime(fmt))
|
||||
self.assertEqual(a.__format__(fmt), dt.strftime(fmt))
|
||||
|
@ -2777,6 +2777,7 @@ class TestDateTime(TestDate):
|
|||
tz = timezone(-timedelta(hours=2, seconds=s, microseconds=us))
|
||||
t = t.replace(tzinfo=tz)
|
||||
self.assertEqual(t.strftime("%z"), "-0200" + z)
|
||||
self.assertEqual(t.strftime("%:z"), "-02:00:" + z)
|
||||
|
||||
# bpo-34482: Check that surrogates don't cause a crash.
|
||||
try:
|
||||
|
@ -3515,8 +3516,8 @@ class TestTime(HarmlessMixedComparison, unittest.TestCase):
|
|||
def test_strftime(self):
|
||||
t = self.theclass(1, 2, 3, 4)
|
||||
self.assertEqual(t.strftime('%H %M %S %f'), "01 02 03 000004")
|
||||
# A naive object replaces %z and %Z with empty strings.
|
||||
self.assertEqual(t.strftime("'%z' '%Z'"), "'' ''")
|
||||
# A naive object replaces %z, %:z and %Z with empty strings.
|
||||
self.assertEqual(t.strftime("'%z' '%:z' '%Z'"), "'' '' ''")
|
||||
|
||||
# bpo-34482: Check that surrogates don't cause a crash.
|
||||
try:
|
||||
|
@ -3934,10 +3935,10 @@ class TestTimeTZ(TestTime, TZInfoBase, unittest.TestCase):
|
|||
self.assertEqual(repr(t4), d + "(0, 0, 0, 40)")
|
||||
self.assertEqual(repr(t5), d + "(0, 0, 0, 40, tzinfo=utc)")
|
||||
|
||||
self.assertEqual(t1.strftime("%H:%M:%S %%Z=%Z %%z=%z"),
|
||||
"07:47:00 %Z=EST %z=-0500")
|
||||
self.assertEqual(t2.strftime("%H:%M:%S %Z %z"), "12:47:00 UTC +0000")
|
||||
self.assertEqual(t3.strftime("%H:%M:%S %Z %z"), "13:47:00 MET +0100")
|
||||
self.assertEqual(t1.strftime("%H:%M:%S %%Z=%Z %%z=%z %%:z=%:z"),
|
||||
"07:47:00 %Z=EST %z=-0500 %:z=-05:00")
|
||||
self.assertEqual(t2.strftime("%H:%M:%S %Z %z %:z"), "12:47:00 UTC +0000 +00:00")
|
||||
self.assertEqual(t3.strftime("%H:%M:%S %Z %z %:z"), "13:47:00 MET +0100 +01:00")
|
||||
|
||||
yuck = FixedOffset(-1439, "%z %Z %%z%%Z")
|
||||
t1 = time(23, 59, tzinfo=yuck)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue