On 06Nov2020 09:36, Frank Millman <fr...@chagford.com> wrote: >On 2020-11-06 9:25 AM, Steve wrote: >>In my program, I have the following lines of code: >> import datetime >> from datetime import timedelta >> >> from time import gmtime, strftime ##define strftime as time/date right >>now >>If I add the code: >> >> from datetime import datetime >> >>these new lines work: >> >> dt = datetime.fromisoformat(ItemDateTime) >> >> dt_string = dt.strftime(' at %H:%M on %A %d %B %Y') >> >>and will fail without that "datetime import datetime" line
Right, because you're using the datetime _class_ to get the fromisoformat factory function. >>however; >> >> >>With that "datetime import datetime" line included, >> >>all of the lines of code throughout the program that contain >>"datetime.datetime" fail. >>These have been in use for over three years and there are at least a dozen >>of them. Yeah. because _those_ lines are using the name "datetime" as the module name. Just replace "datetime.datetime" throughout with "datetime". Your code will be more readable anyway. >>The error produced is: >> >> time1 = datetime.datetime.strptime(T1, date_format) >> >> AttributeError: type object 'datetime.datetime' has no attribute >>'datetime' That is because "datetime" is currently the class, not the module. >1. Remove the line 'from datetime import datetime'. > >2. Change dt = datetime.fromisoformat(ItemDateTime) to > dt = datetime.datetime.fromisoformat(ItemDateTime) > >Unless I have missed something, that should work. That will work, but produces verbose code. I prefer to import things _from_ the datetime module, letting me drop the 'datetime." module prefix across the code. Cheers, Cameron Simpson <c...@cskk.id.au> -- https://mail.python.org/mailman/listinfo/python-list