@@ -2010,6 +2010,8 @@ def test_isoformat(self):
20102010 self .assertEqual (t .isoformat (timespec = 'microseconds' ), "0001-02-03T04:05:01.000123" )
20112011 self .assertEqual (t .isoformat (timespec = 'auto' ), "0001-02-03T04:05:01.000123" )
20122012 self .assertEqual (t .isoformat (sep = ' ' , timespec = 'minutes' ), "0001-02-03 04:05" )
2013+ self .assertEqual (t .isoformat (use_utc_designator = False ), "0001-02-03T04:05:01.000123" )
2014+ self .assertEqual (t .isoformat (use_utc_designator = True ), "0001-02-03T04:05:01.000123" )
20132015 self .assertRaises (ValueError , t .isoformat , timespec = 'foo' )
20142016 # bpo-34482: Check that surrogates are handled properly.
20152017 self .assertRaises (ValueError , t .isoformat , timespec = '\ud800 ' )
@@ -2018,6 +2020,8 @@ def test_isoformat(self):
20182020
20192021 t = self .theclass (1 , 2 , 3 , 4 , 5 , 1 , 999500 , tzinfo = timezone .utc )
20202022 self .assertEqual (t .isoformat (timespec = 'milliseconds' ), "0001-02-03T04:05:01.999+00:00" )
2023+ self .assertEqual (t .isoformat (use_utc_designator = False ), "0001-02-03T04:05:01.999500+00:00" )
2024+ self .assertEqual (t .isoformat (use_utc_designator = True ), "0001-02-03T04:05:01.999500Z" )
20212025
20222026 t = self .theclass (1 , 2 , 3 , 4 , 5 , 1 , 999500 )
20232027 self .assertEqual (t .isoformat (timespec = 'milliseconds' ), "0001-02-03T04:05:01.999" )
@@ -2037,6 +2041,8 @@ def test_isoformat(self):
20372041 tz = FixedOffset (timedelta (seconds = 16 ), 'XXX' )
20382042 t = self .theclass (2 , 3 , 2 , tzinfo = tz )
20392043 self .assertEqual (t .isoformat (), "0002-03-02T00:00:00+00:00:16" )
2044+ self .assertEqual (t .isoformat (use_utc_designator = False ), "0002-03-02T00:00:00+00:00:16" )
2045+ self .assertEqual (t .isoformat (use_utc_designator = True ), "0002-03-02T00:00:00+00:00:16" )
20402046
20412047 def test_isoformat_timezone (self ):
20422048 tzoffsets = [
@@ -3276,6 +3282,74 @@ def test_isoformat_timezone(self):
32763282 with self .subTest (tzi = tzi ):
32773283 assert t .isoformat () == exp
32783284
3285+ def test_isoformat_utc_designator (self ):
3286+ t = self .theclass (hour = 12 , minute = 34 , second = 56 , microsecond = 123456 )
3287+ self .assertEqual (t .isoformat (), "12:34:56.123456" )
3288+ self .assertEqual (t .isoformat (use_utc_designator = False ), "12:34:56.123456" )
3289+ self .assertEqual (t .isoformat (use_utc_designator = True ), "12:34:56.123456" )
3290+
3291+ t = self .theclass (hour = 12 , minute = 34 , second = 56 , microsecond = 123456 ,
3292+ tzinfo = timezone .utc )
3293+ self .assertEqual (t .isoformat (), "12:34:56.123456+00:00" )
3294+ self .assertEqual (t .isoformat (use_utc_designator = False ), "12:34:56.123456+00:00" )
3295+ self .assertEqual (t .isoformat (use_utc_designator = True ), "12:34:56.123456Z" )
3296+
3297+ t = self .theclass (hour = 12 , minute = 34 , second = 56 , microsecond = 123456 ,
3298+ tzinfo = timezone (timedelta (0 )))
3299+ self .assertEqual (t .isoformat (), "12:34:56.123456+00:00" )
3300+ self .assertEqual (t .isoformat (use_utc_designator = False ), "12:34:56.123456+00:00" )
3301+ self .assertEqual (t .isoformat (use_utc_designator = True ), "12:34:56.123456Z" )
3302+
3303+ t = self .theclass (hour = 12 , minute = 34 , second = 56 , microsecond = 123456 ,
3304+ tzinfo = timezone (timedelta (0 ), "UTC" ))
3305+ self .assertEqual (t .isoformat (), "12:34:56.123456+00:00" )
3306+ self .assertEqual (t .isoformat (use_utc_designator = False ), "12:34:56.123456+00:00" )
3307+ self .assertEqual (t .isoformat (use_utc_designator = True ), "12:34:56.123456Z" )
3308+
3309+ t = self .theclass (hour = 12 , minute = 34 , second = 56 , microsecond = 123456 ,
3310+ tzinfo = timezone (timedelta (0 ), "GMT" ))
3311+ self .assertEqual (t .isoformat (), "12:34:56.123456+00:00" )
3312+ self .assertEqual (t .isoformat (use_utc_designator = False ), "12:34:56.123456+00:00" )
3313+ self .assertEqual (t .isoformat (use_utc_designator = True ), "12:34:56.123456+00:00" )
3314+
3315+ t = self .theclass (hour = 12 , minute = 34 , second = 56 , microsecond = 123456 ,
3316+ tzinfo = timezone (timedelta (hours = 5 ), "UTC" ))
3317+ self .assertEqual (t .isoformat (), "12:34:56.123456+05:00" )
3318+ self .assertEqual (t .isoformat (use_utc_designator = False ), "12:34:56.123456+05:00" )
3319+ self .assertEqual (t .isoformat (use_utc_designator = True ), "12:34:56.123456Z" )
3320+
3321+ class UnnamedTimezone (tzinfo ):
3322+ def utcoffset (self , dt ):
3323+ return timedelta (0 )
3324+
3325+ def dst (self , dt ):
3326+ return timedelta (0 )
3327+
3328+ def tzname (self , dt ):
3329+ return None
3330+
3331+ t = self .theclass (hour = 12 , minute = 34 , second = 56 , microsecond = 123456 ,
3332+ tzinfo = UnnamedTimezone ())
3333+ self .assertEqual (t .isoformat (), "12:34:56.123456+00:00" )
3334+ self .assertEqual (t .isoformat (use_utc_designator = False ), "12:34:56.123456+00:00" )
3335+ self .assertEqual (t .isoformat (use_utc_designator = True ), "12:34:56.123456+00:00" )
3336+
3337+ class NonStringNamedTimezone (tzinfo ):
3338+ def utcoffset (self , dt ):
3339+ return timedelta (0 )
3340+
3341+ def dst (self , dt ):
3342+ return timedelta (0 )
3343+
3344+ def tzname (self , dt ):
3345+ return 42
3346+
3347+ t = self .theclass (hour = 12 , minute = 34 , second = 56 , microsecond = 123456 ,
3348+ tzinfo = UnnamedTimezone ())
3349+ self .assertEqual (t .isoformat (), "12:34:56.123456+00:00" )
3350+ self .assertEqual (t .isoformat (use_utc_designator = False ), "12:34:56.123456+00:00" )
3351+ self .assertEqual (t .isoformat (use_utc_designator = True ), "12:34:56.123456+00:00" )
3352+
32793353 def test_1653736 (self ):
32803354 # verify it doesn't accept extra keyword arguments
32813355 t = self .theclass (second = 1 )
0 commit comments