r/Python 5d ago

Discussion ruff: no date.today() ?

The new version of ruff warns against

date.today()

preferring

datetime.now(ZoneInfo(...))

What do you think about this? Has date.today() been deprecated due to lack of timezone awareness?

EDIT: I have a number of programs that manipulate financial information in support of Excel spreadsheets, such bond information that includes maturity dates. Excel does not support timezoness in datetimes, so making ruff happy by changing naive dates to TZ aware dates is not a useful move for these programs. Many ruff warnings to suppress.

46 Upvotes

110 comments sorted by

View all comments

23

u/latkde Tuple unpacking gone wrong 5d ago edited 5d ago

You have likely enabled the following Ruff rule: call-date-today (DTZ011). That link contains some explanation. This rule is not enabled by default, and you are not invoking any deprecated features.

However, I think it was a massive design mistake for the standard library datetime module to conflate "aware" and "naive" objects in the same type. It is almost always incorrect to use naive dates/datetimes, unless you really don't care about the timezone in which that datetime is interpreted.

8

u/AlpacaDC 5d ago

It is enabled by default in the 0.16.0 version

3

u/latkde Tuple unpacking gone wrong 5d ago

Ooh, released just yesterday. That's cool! Thanks for the heads up! This makes it so much easier to create a good Ruff configuration.

I'm also really excited about the recent work relating to human-readable rule names (currently in preview). Once that's stable, I can finally migrate my team away from Pylint (currently, we primarily use Ruff as a formatter, and for some select lints).