Add a tz argument to date.today, mirroring the interface of datetime.now.
Pitch
"Today" depends on the time zone, but there are many situations where you may be interested in the current date in other time zones. The most common is probably a server that runs in UTC time, but is used by people around the world.
Example use cases:
A calendar application where you want to show today's appointments to the end user, in the end-user's time zone.
Prioritizing records by due date, with records due today prioritized over records that are late.
Business rules involving when a record is "stale" that depends on a number of days ago relative to a date. This can easily lead to off-by-one errors if you don't specify the time zone.
Currently, these can be implemented with datetime.now(tz=...).date(). While this is not a huge inconvenience, it seems like "today" and "now" both depend on the timezone, so they should both take the same inputs.
Previous discussion
This was discussed in this thread on python-ideas. No one voiced any opposition, and Steven D'Aprano suggested I create an issue here.
Implementation
The python code in datetime.py looks fairly easy to change. Basically add something like:
iftzisnotNone:
returndatetime.now(tz=tz).date()
That may not be the most performant implementation, though it's guaranteed to pick up any bugfixes to .now(...), which is desirable.
I'm less familiar with the C code. The relevant piece seems to be here, which may be able to work in the same way (calling the .now() code). If anyone has implementation pointers, I'd appreciate it.
The most difficult part seems to be adding a test case that will reliably pass whatever the local time the test is running under is.
Off the top of my head, my only idea is to pick time zones on either side of the international date line and assert that "today" in each of them differs by 1. I'm open to other suggestions for test cases.
The text was updated successfully, but these errors were encountered:
Feature or enhancement
Add a
tz
argument todate.today
, mirroring the interface ofdatetime.now
.Pitch
"Today" depends on the time zone, but there are many situations where you may be interested in the current date in other time zones. The most common is probably a server that runs in UTC time, but is used by people around the world.
Example use cases:
date
. This can easily lead to off-by-one errors if you don't specify the time zone.Currently, these can be implemented with
datetime.now(tz=...).date()
. While this is not a huge inconvenience, it seems like "today" and "now" both depend on the timezone, so they should both take the same inputs.Previous discussion
This was discussed in this thread on python-ideas. No one voiced any opposition, and Steven D'Aprano suggested I create an issue here.
Implementation
The python code in
datetime.py
looks fairly easy to change. Basically add something like:That may not be the most performant implementation, though it's guaranteed to pick up any bugfixes to
.now(...)
, which is desirable.I'm less familiar with the C code. The relevant piece seems to be here, which may be able to work in the same way (calling the
.now()
code). If anyone has implementation pointers, I'd appreciate it.The most difficult part seems to be adding a test case that will reliably pass whatever the local time the test is running under is.
Off the top of my head, my only idea is to pick time zones on either side of the international date line and assert that "today" in each of them differs by 1. I'm open to other suggestions for test cases.
The text was updated successfully, but these errors were encountered: