[formatter] implement 'O' format specifier (#2736)

to apply a UTC offset to 'date' values and other datetime objects
This commit is contained in:
Mike Fährmann
2022-07-08 12:51:03 +02:00
parent e4f48cc810
commit 90ae48c40c
3 changed files with 56 additions and 1 deletions

View File

@@ -9,6 +9,7 @@
import os
import sys
import time
import unittest
import datetime
import tempfile
@@ -192,6 +193,31 @@ class TestFormatter(unittest.TestCase):
self._run_test("{ds:D%Y}", "2010-01-01T01:00:00+0100")
self._run_test("{l:D%Y}", "None")
def test_offset(self):
self._run_test("{dt:O 01:00}", "2010-01-01 01:00:00")
self._run_test("{dt:O+02:00}", "2010-01-01 02:00:00")
self._run_test("{dt:O-03:45}", "2009-12-31 20:15:00")
self._run_test("{dt:O12}", "2010-01-01 12:00:00")
self._run_test("{dt:O-24}", "2009-12-31 00:00:00")
self._run_test("{ds:D%Y-%m-%dT%H:%M:%S%z/O1}", "2010-01-01 01:00:00")
self._run_test("{t!d:O2}", "2010-01-01 02:00:00")
orig_daylight = time.daylight
orig_timezone = time.timezone
orig_altzone = time.altzone
try:
time.daylight = False
time.timezone = -3600
self._run_test("{dt:O}", "2010-01-01 01:00:00")
time.timezone = 7200
self._run_test("{dt:Olocal}", "2009-12-31 22:00:00")
finally:
time.daylight = orig_daylight
time.timezone = orig_timezone
time.altzone = orig_altzone
def test_chain_special(self):
# multiple replacements
self._run_test("{a:Rh/C/RE/e/RL/l/}", "Cello wOrld")