Dates, times, and timezones: Python vs the real world
Transcript of Dates, times, and timezones: Python vs the real world
![Page 1: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/1.jpg)
Dates, times,and timezones:
Python vs the real worldAndrew Neitsch
2017-09-28
![Page 2: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/2.jpg)
OutlineIntroduction
Theory
Python
Pendulum
Conclusions
![Page 3: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/3.jpg)
Basic use cases for date andtime computation
▶ What time is it now?▶ What time is it in ____?▶ What time is it here when it’s ____in ____?▶ What does the date 9/10/11 mean?▶ How long ago did ____ happen?▶ Remind me when ____ is about to happen
![Page 4: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/4.jpg)
Introduction
Theory
Python
Pendulum
Conclusions
![Page 5: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/5.jpg)
Dates and times for humans
▶ Times▶ Dates▶ Time zones
![Page 6: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/6.jpg)
Times for humans
▶ TimesPretty straightforwardPartition the day into regular intervals:
▶ Dates▶ Time zones
![Page 7: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/7.jpg)
Times for humans
▶ TimesPretty straightforwardPartition the day into regular intervals:24 hours of 60 minutes of 60 seconds
▶ Dates▶ Time zones
![Page 8: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/8.jpg)
Dates for humans
▶ Times▶ Dates
Partition the year into irregular intervals▶ Time zones
![Page 9: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/9.jpg)
Dates for humans
▶ Times▶ Dates
Partition the year into irregular intervals12 months of varying lengthsPattern depends on year
▶ Time zones
![Page 10: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/10.jpg)
Dates for humans▶ Times▶ Dates
Partition the year into irregular intervalsRoot problem:365.24220 earth rotations per orbit of sun$ gfactor 365365: 5 73Not a convenient number,so months of varying lengths
▶ Time zones
![Page 11: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/11.jpg)
Dates for humans▶ Times▶ Dates
365.24220 earth rotations per orbit of sunLeap days to deal with the fractional part>>> 3 / ((365 + 1/4 - 1/100 + 1/400) - 365.24220)10000.000000615424
▶ Time zones
![Page 12: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/12.jpg)
Time zones for humans
![Page 13: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/13.jpg)
Time zones for humans
▶ Noon is slightly different in different parts ofthe world
![Page 14: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/14.jpg)
Time zones for humans
▶ Time zones are a balance between precision ofhaving clocks close to the sun, and theconvenience of uniform time over large parts ofthe earth
![Page 15: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/15.jpg)
Time zones for humans
▶ Defined by local laws, can change with little orno notice
![Page 16: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/16.jpg)
Time zones for humans
▶ Defined by local laws, can change with little orno notice
▶ Defined relative to Universal CoordinatedTime: UTC (Similar to historical GreenwichMean Time)
![Page 17: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/17.jpg)
Time zones for humans
▶ Defined by local laws, can change with little orno notice
▶ Defined relative to Universal CoordinatedTime: UTC
▶ Today, Calgary is UTC-0600, which meansexactly 6 hours behind UTC
![Page 18: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/18.jpg)
Time zones for humans▶ Defined by local laws, can change with little or
no notice▶ Defined relative to Universal Coordinated
Time: UTC▶ Today, Calgary is UTC-0600, which means
exactly 6 hours behind UTC▶ Changes to UTC-0700 at 2:00 a.m. on
November 5
![Page 19: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/19.jpg)
Time zones for humans
▶ Defined by local laws, can change with little orno notice
▶ Defined relative to Universal CoordinatedTime: UTC
▶ Egypt 2014: Daylight savings transitions inMay, June, July, and September
![Page 20: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/20.jpg)
Time zones for humans
▶ Defined by local laws, can change with little orno notice
▶ Defined relative to Universal CoordinatedTime: UTC
▶ Not a lot of theory here: just need to be ableto look it up
![Page 21: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/21.jpg)
Conclusions for humans
▶ TimesDivided into regular intervals, relativelystraightforward
▶ Dates▶ Time zones
![Page 22: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/22.jpg)
Conclusions for humans▶ Times
Divided into regular intervals, relativelystraightforward
▶ DatesDivided into irregular intervals, complicatedbut unchanging
▶ Time zones
![Page 23: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/23.jpg)
Conclusions for humans▶ Times
Divided into regular intervals, relativelystraightforward
▶ DatesDivided into irregular intervals, complicatedbut unchanging
▶ Time zonesSuper-complicated, arbitrary, subject tochange without notice
![Page 24: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/24.jpg)
Conclusions for humans▶ Times
Divided into regular intervals, relativelystraightforward
▶ DatesDivided into irregular intervals, complicatedbut unchanging
▶ Time zonesSuper-complicated, arbitrary, subject tochange without notice
Time and date are meaningless without timezone
![Page 25: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/25.jpg)
Time zones for humans
You can’t know how far away a date or time is fromany other date or time without knowing whattimezones they are referring to
Given that time is what keeps everything fromhappening at once ...
That’s pretty important.
![Page 26: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/26.jpg)
Time zones for humans
You can’t know how far away a date or time is fromany other date or time without knowing whattimezones they are referring to
Given that time is what keeps everything fromhappening at once ...
That’s pretty important.
![Page 27: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/27.jpg)
Time zones for humans
You can’t know how far away a date or time is fromany other date or time without knowing whattimezones they are referring to
Given that time is what keeps everything fromhappening at once ...
That’s pretty important.
![Page 28: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/28.jpg)
Dates and times forcomputers
Computers do not care about what we care about
▶ Times▶ Dates▶ Time zones
![Page 29: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/29.jpg)
Dates and times forcomputers
Computers do not care about what we care about
▶ TimesWe can just count seconds since somearbitrary pointDo math by subtracting
▶ Dates▶ Time zones
![Page 30: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/30.jpg)
Dates and times forcomputers
Computers do not care about what we care about▶ Times
We can just count seconds since somearbitrary pointDo math by subtractingSeconds since start of January 1, 1970, UTC:1506624282
▶ Dates▶ Time zones
![Page 31: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/31.jpg)
Dates and times forcomputers
Computers do not care about what we care about
▶ Times▶ Dates▶ Time zones
Only matter for I/O with humans
![Page 32: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/32.jpg)
Theoretical conclusions
Humans and computers have very different needswhen it comes to dates and times
![Page 33: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/33.jpg)
Introduction
Theory
Python
Pendulum
Conclusions
![Page 34: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/34.jpg)
Basic use cases for date andtime computation
▶ What time is it now?▶ What time is it in ____?▶ What time is it here when it’s ____in ____?▶ What does the date 9/10/11 mean?▶ How long ago did ____ happen?▶ Remind me when ____ is about to happen
![Page 35: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/35.jpg)
Python’s standard libraryCreate datetime objects and convert them toseconds since the epoch:
>>> datetime.datetime.utcnow().strftime("%s")'1506662308'>>> datetime.datetime.now().strftime("%s")'1506640708'
Python’s standard library does not understand timezones and is not generally safe to use for date ortime computations.
![Page 36: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/36.jpg)
Python’s standard libraryCreate datetime objects and convert them toseconds since the epoch:>>> datetime.datetime.utcnow().strftime("%s")'1506662308'>>> datetime.datetime.now().strftime("%s")'1506640708'
Python’s standard library does not understand timezones and is not generally safe to use for date ortime computations.
![Page 37: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/37.jpg)
Python’s standard libraryCreate datetime objects and convert them toseconds since the epoch:>>> datetime.datetime.utcnow().strftime("%s")'1506662308'>>> datetime.datetime.now().strftime("%s")'1506640708'
This is substantially more dangerous than usingMySQL:mysql> SELECT 0 = 'banana';+--------------+| 0 = 'banana' |+--------------+| 1 |+--------------+1 row in set, 1 warning (0.00 sec)
Python’s standard library does not understand timezones and is not generally safe to use for date ortime computations.
![Page 38: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/38.jpg)
Python’s standard libraryCreate datetime objects and convert them toseconds since the epoch:>>> datetime.datetime.utcnow().strftime("%s")'1506662308'>>> datetime.datetime.now().strftime("%s")'1506640708'
Python’s standard library does not understand timezones and is not generally safe to use for date ortime computations.
![Page 39: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/39.jpg)
Introduction
Theory
Python
Pendulum
Conclusions
![Page 40: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/40.jpg)
Pendulum: “Pythondatetimes made easy”
pip3 install pendulum
Automatically uses reliable time zone database
Olson database • https://github.com/eggert/tz
![Page 41: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/41.jpg)
Pendulum: “Pythondatetimes made easy”
pip3 install pendulumAutomatically uses reliable time zone database
Olson database • https://github.com/eggert/tz
![Page 42: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/42.jpg)
What time is it now?>>> now = pendulum.now()>>> now<Pendulum [2017-09-28T17:18:28.975259 -06:00] >>>> now.timezone<Timezone [America/Edmonton]>>>> now.timestamp()1506640708.975259>>> now.day_of_week == pendulum.THURSDAYTrue
>>> utcnow = pendulum.utcnow()>>> utcnow<Pendulum [2017-09-28T23 :18:29.081249+00:00] >>>> utcnow.timestamp()1506640709.081249
![Page 43: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/43.jpg)
What time is it now?>>> now = pendulum.now()>>> now<Pendulum [2017-09-28T17:18:29.191388 -06:00] >>>> now.timezone<Timezone [America/Edmonton]>>>> now.timestamp()1506640709.191388>>> now.day_of_week == pendulum.THURSDAYTrue
>>> utcnow = pendulum.utcnow()>>> utcnow<Pendulum [2017-09-28T23 :18:29.303454+00:00] >>>> utcnow.timestamp()1506640709.303454
![Page 44: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/44.jpg)
What time is it in ____?
>>> pendulum.now(). in_timezone("Europe/Berlin")<Pendulum [2017-09-29T01 :18:29.411153+02:00] >
![Page 45: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/45.jpg)
What time is it here whenit’s ____in ____?
>>> there_time = pendulum.create(>>> hour=9, minute=15, tz="Europe/Berlin")>>> there_time<Pendulum [2017-09-29T09:15:00+02:00] >>>> here_time = there_time.in_tz(>>> pendulum.local_timezone ())>>> here_time<Pendulum [2017-09-29T01:15:00-06:00]>>>> there_time == here_timeTrue>>> here_time.strftime("%H:%M")'01:15'
![Page 46: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/46.jpg)
What does the date 9/10/11mean?
>>> t = pendulum.parse ("9/10/11")>>> t<Pendulum [2009-10-11T00:00:00+00:00] >
![Page 47: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/47.jpg)
What does the date 9/10/11mean?
>>> t = pendulum.parse ("9/10/11")>>> t<Pendulum [2009-10-11T00:00:00+00:00] >
Pendulum comes up with somethingPendulum isn’t perfect andshould probably raise exceptions than it does
![Page 48: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/48.jpg)
What does the date 9/10/11mean?
>>> t = pendulum.parse ("9/10/11")>>> t<Pendulum [2009-10-11T00:00:00+00:00] >
YYYY-MM-DD
Commonly called ISO8601:▶ Unambiguous▶ If you have a list of dates/times, sorting
alphabetically sorts by date/time
![Page 49: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/49.jpg)
How long ago did ____happen?
>>> d = pendulum.now()\>>> - pendulum.parse("1969-07-21 2:39")>>> d<Period [1969-07-21T02 :39:00+00:00 -> 2017-09-28T17:18:29.965581 -06:00] >>>> d.total_seconds()1520800769.965581>>> str(d)'48 years 2 months 1 week 14 hours 39 minutes 29 seconds '
![Page 50: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/50.jpg)
Remind me when ____ isabout to happen
>>> i = pendulum.create(2021, 1, 20, 12,>>> tz="America/New_York")>>> i<Pendulum [2021-01-20T12:00:00-05:00]>>>> d = i - pendulum.now()>>> d<Period [2017-09-28T17:18:30.084259 -06:00 -> 2021-01-20T12:00:00-05:00]>>>> str(d)'3 years 3 months 3 weeks 1 day 18 hours 41 minutes 29 seconds '
But what if the time zone changes?Better to store it as datetime and timezone,
![Page 51: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/51.jpg)
Remind me when ____ isabout to happen
>>> i = pendulum.create(2021, 1, 20, 12,>>> tz="America/New_York")>>> i<Pendulum [2021-01-20T12:00:00-05:00]>>>> d = i - pendulum.now()>>> d<Period [2017-09-28T17:18:30.206070 -06:00 -> 2021-01-20T12:00:00-05:00]>>>> str(d)'3 years 3 months 3 weeks 1 day 18 hours 41 minutes 29 seconds '
But what if the time zone changes?Better to store it as datetime and timezone,
![Page 52: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/52.jpg)
Introduction
Theory
Python
Pendulum
Conclusions
![Page 53: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/53.jpg)
What we haven’t talkedabout
Pendulum may or not help you here; you’re on yourown.
▶ Other calendars: Buddhist, Coptic, Hebrew,Islamic ...
▶ Localization▶ Leap seconds▶ Time synchronization▶ ...
![Page 54: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/54.jpg)
What we haven’t talkedabout
Pendulum may or not help you here; you’re on yourown.
▶ Other calendars: Buddhist, Coptic, Hebrew,Islamic ...
▶ Localization▶ Leap seconds▶ Time synchronization▶ ...
![Page 55: Dates, times, and timezones: Python vs the real world](https://reader031.fdocuments.in/reader031/viewer/2022022217/62140723e04f0f444043c231/html5/thumbnails/55.jpg)
Conclusion
▶ Dates and times are most complicatiedbecause of time zones
▶ Python falls down hard there▶ Pendulum handles common date, time, and
time zone computations in an easier and saferway