Biorąc pod uwagę ciąg znaków (reqDayOf), który jest nazwą dnia tygodnia, jak określić dzień tygodnia jako dziesiętny (a następnie zwrócić następną instancję na podstawie obiektu datetime)?Python: Biorąc pod uwagę ciąg znaków, który jest nazwą dnia tygodnia, jak określić dzień tygodnia jako dziesiętny (i datę następną).
Uzyskiwanie roku obiektu datetime i programu iso Tydzień roku, a następnie używanie strptime z rokiem + tydzień w roku + nazwa dnia tygodnia działa, ale działa jak włamanie.
import datetime
def getDateFromDayOf(dateTimeObj,reqDayOf):
#reqDayOf is one of ['monday','tuesday','wednesday','thursday','friday','saturday','sunday']
#return the next instance of reqDayOf
#after dateTimeObj
#as a datetime object
#Get the WeekOfYear from dateTimeObj and then
#get the date based on Year + WeekOfYear + reqDayOf
(dtoYear,dtoIsoWeek,x)=dateTimeObj.isocalendar()
checkDate= '{}-{}-{}'.format(dtoYear,dtoIsoWeek,reqDayOf)
dateOfDay=datetime.datetime.strptime(checkDate,"%Y-%U-%A")
#return dateOfDay if it's greater than the original date
if dateOfDay > dateTimeObj:
return dateOfDay
else:
#this is needed on Sundays
#add a week
return dateOfDay + datetime.timedelta(days=7)
>>> datetime.datetime.now().strftime('%a %Y %b %d')
'Fri 2013 Apr 05'
>>> getDateFromDayOf(datetime.datetime.now(),'Monday').strftime('%a %Y %b %d')
'Mon 2013 Apr 08'
Nauczyłem się kilku rzeczy tutaj. dzięki! – Alex