我有一个sript的这一部分,转换为一个月和一天的date()函数,我运行它虽然它给我一个列表是不可调用的错误,并说问题是在包含date()函数的行
def current_date(days_traveled):
#list months
dt=days_traveled+1
if dt<=30:
month=4
day=dt
if (dt>=31) and (dt<=61):
month=5
day=dt-30
if (dt>=62) and (dt<=91):
month=6
day=dt-61
if (dt>=92) and (dt<=122):
month=7
day=dt-91
if (dt>=123) and (dt<=153):
month=8
day=dt-122
if (dt>=154) and (dt<=183):
month=9
day=dt-153
if (dt>=184) and (dt<=214):
month=10
day=dt-183
if (dt>=215) and (dt<=244):
month=11
day=dt-214
if (dt>=245) and (dt<=275):
month=12
day=dt-244
year=date(1843,month,day) >>>error is here
weekday=year.weekday()
weekday_list=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
current_day=weekday_list[weekday]
date_list=[]
date_list.append(year)
date_list.append(weekday)
date_list.append(current_day)
return date_list
我想这是一个简单的命名错误,但我不知道它是什么。 感谢
答案 0 :(得分:0)
我不知道你是如何得到这个错误的,但是通过from datetime import date
你的脚本可以正常运行而没有任何错误。但这不是问题。
问题是你正在做很多工作来计算python内置的东西。所以我认为你的起点是01/04/1843
,对吧?您需要做的就是使用python的datetime
和timedelta
对象进行集中,让python为您完成工作。然后一切变得更容易,代码更少,错误的机会也更少。
像这样:
from datetime import datetime, timedelta
DEFAULT_DATE = datetime(1843, 4, 1) #this is a constant
def current_date(days_traveled):
dt = DEFAULT_DATE + timedelta(days=days_traveled+1) #I don't know why +1, so I'm leaving it like that
year = dt.year
weekday = dt.weekday()
current_day = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][weekday]
return [year, weekday, current_day]
我希望使用datetime.strftime('%Y-%w-%A')
来获取一行的所有内容,但该功能在1900年之前的日期不起作用(而且,您将以字符串形式获取所有内容,这可能不是希望的)。
希望有帮助=]