我一直在努力了解如何使用datetime对象。我想使用datetime.date实例作为字典中的键。然后我希望能够使用datetime.delta返回指定范围内的日期。
我的第一个难题是当我创建一个要输入字典的对象时。
class Work_day():
'''input a workday , date and hours worked'''
def __init__(self, date, hours, rate):
self.date = datetime.date()
self.hours = hours
self.rate = rate
我希望self.date成为datetime.date对象,但datetime.date需要3个参数(年,月,日),那么def_ init _参数&#的正确语法是什么? 39;日期'?
然后我假设当我改变在Work_day类中编写的内容时,当我在Timesheet类中创建它的实例时,我将不得不修改我的代码,例如在add_work_day()方法
class Timesheet():
'''Represent a collection of workdays'''
def __init__(self):
self.timesheet = {}
def add_work_day(self, date, hours,rate):
'''adds a record of a work day into the timesheet dictionary'''
day = Work_day(date, hours, rate)
if day.date in self.timesheet:
print("There is already an entry for this day. ")
else:
self.timesheet[day.date] = hours, rate
我一直在研究python文档和淘书,但我还没有得到它!需要一些帮助。
我还有一个方法可以在时间表中打印一系列工作日。当我为一个简单的int提交日期键时,我使它工作。这是(在'''''),在下面的日期时间增量下进行了一次艰难的尝试
def show_days(self):
'''shows a user defined range of dates and the total pay for that period'''
pp = pprint.PrettyPrinter()
date_from = input("From date: ")
date_to = input("To date: ")
t = self.timesheet
total = 0
'''for dates in range(date_from, date_to + 1):
if dates in t:
total += self.sum_day(dates)
pp.pprint((dates, t[dates)])
print("Total £", total)'''
date = date_start = datetime.date(date_from)
date_end = datetime.date(date_to)
while date <= date_end:
if date in t:
print(date, t[dates])
date += datetime.timedelta(days=1)
我希望有人能够耐心地通过这个来和我说话。欢呼声。
答案 0 :(得分:0)
如果您使用self.date = datetime.date(*date)
指定日期,则可以通过传递(年,月,日)元组来创建Work_day
:
day = Work_day((2013,5,31), 8.0, 8.25)
或者,如果您希望输入为日期字符串,请使用datetime.strptime
,相应的格式字符串和date()
方法来获取date
对象:
self.date = datetime.datetime.strptime(date,'%m/%d/%Y').date()
...
date = Work_day('5/31/2013', 8.0, 8.25)
最后,你可以传递一个日期对象:
day = Work_day(datetime.date(2013,5,31), 8.0, 8.25)
...
self.date = date
Timesheet
类应该在任何这些更改后工作。 show_days
仍需要一些工作,但我会将其作为练习。提示:使用strptime
解析输入日期。