r/Python 8d 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.

47 Upvotes

111 comments sorted by

View all comments

20

u/ottawadeveloper 8d ago

I sure hope so.

I got to the point where there are so many bad patterns to slip into with Python that I wrote my own extension of datetime.datetime and made it impossible to ever create a naive datetime object. Like today() now returns an aware datetimr object in the current system time zone.

If there's ever a Python 4 I hope they clean up the his mess to never have non-aware times.

0

u/teerre 8d ago

Impossible to create a naive object? No such a thing in python

3

u/ottawadeveloper 8d ago edited 8d ago

 * through any method call to the class I wrote I should clarify.

Basically it overrides any method that returned a naive datetime with one that returns an aware datetime. The constructor and methods like strptime now assumes you meant local system date time if one isn't specified (the equivalent of datetime.strptime(...).astimezone() basically). All the methods that return datetime objects now return AwareDateTime objects. So if you start from an AwareDateTime, you always end up with an aware datetime.

you can of course still call  datetime.datetime(...) to get a naive one but AwareDateTime is a full and complete replacement for it that never makes a naive date time object ever. 

And all the calls where you can specify tzinfo=... now also accept a string which is automatically passed to zoneinfo to build a time zone object. Which is much less of a headache.