Skip to content

Instantly share code, notes, and snippets.

@jcbertin
Created November 19, 2020 00:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jcbertin/fedc115ea8122bec9953aa11041294eb to your computer and use it in GitHub Desktop.
Save jcbertin/fedc115ea8122bec9953aa11041294eb to your computer and use it in GitHub Desktop.
Incorrect writing of dates in plistlib
import plistlib
import os
import time
from datetime import datetime
from dateutil.tz import gettz
# create a controlled environment for testing: setup default timezone
os.environ['TZ'] = 'GMT'
time.tzset()
# create both timezone naive and timezone aware dates
naive = datetime(2020, 11, 18, 21, 0, 0)
aware = datetime(2020, 11, 18, 21, 0, 0, tzinfo=gettz('Europe/Paris'))
print(plistlib.dumps({'date': naive}))
# output correct:
# <?xml version="1.0" encoding="UTF-8"?>
# <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
# <plist version="1.0">
# <dict>
# <key>date</key>
# <date>2020-11-18T21:00:00Z</date>
# </dict>
# </plist>
print(plistlib.dumps({'date': aware}))
# output incorrect, date should be "2020-11-18T20:00:00Z":
# <?xml version="1.0" encoding="UTF-8"?>
# <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
# <plist version="1.0">
# <dict>
# <key>date</key>
# <date>2020-11-18T21:00:00Z</date>
# </dict>
# </plist>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment