我创建了以下函数,该函数将根据用户提供的内容为用户计算时间,即如果用户提供(1,'h','+'),该函数将确保将一个小时添加到当前时间,如果用户未提供任何内容,则默认参数将确保为用户提供当前时间。但是,我希望函数接受('-1h'),以便用户可以以这种格式输入而不是它现在正在接受的格式。 下面是我要修改的功能,因为我们可以看到它接受当前格式,但是我想更改格式。
import datetime
import time
def time_offset(time=None, value='h', ch='-'):
now = datetime.datetime.now()
if time is None:
raw_time = now
result = raw_time.strftime("%Y-%m-%d %H:%M:%S")
elif ch == '+' and value == 'h':
raw_time = now + datetime.timedelta(hours=time)
result = raw_time.strftime("%Y-%m-%d %H:%M:%S")
elif ch == '-' and value == 'h':
raw_time = now - datetime.timedelta(hours=time)
result = raw_time.strftime("%Y-%m-%d %H:%M:%S")
elif ch == '-' and value == 'm':
raw_time = now - datetime.timedelta(minutes=time)
result = raw_time.strftime("%Y-%m-%d %H:%M:%S")
elif ch == '+' and value == 'm':
raw_time = now + datetime.timedelta(minutes=time)
result = raw_time.strftime("%Y-%m-%d %H:%M:%S")
else:
print("Please provide valid values, we only calculate hours and minutes for now")
return result
#if nothing is provided
print(time_offset())
print(time_offset(1,'h','-'))
预期输出应该相同,但输入与我之前提到的不同
2019-06-25 09:34:31 2019-06-25 08:34:31
答案 0 :(得分:0)
使用面向对象的方法入门如何?这是一个基本类,根据用法可能容易出错,但足以开始使用。尽管1h
是无效的语法,但如果您可以接受1*h
,则应该这样做:
class mytime:
def __init__(self,type):
self.type=type
self.amount=1
self.state=1
def __mul__(self,x):
self.amount = x
__rmul__ = __mul__
def __neg__(self):
self.state = -1
def __pos__(self):
self.state = 1
在乘法函数中确保参数确实是数字可能很有用。现在您可以使用:
h = mytime('h')
time_offset(-h) //Or -2*h, or +h, or 3*h etc...
现在,您需要更改time_offset
才能使用类似的东西来处理它:
我创建了以下函数,该函数将根据用户提供的内容为用户计算时间,即如果用户提供(1,'h','+'),该函数将确保将一个小时添加到当前时间,如果用户未提供任何内容,则默认参数将确保为用户提供当前时间。但是,我希望该函数接受(-1h),以便用户不必输入引号,并且该函数仍然可以使用。
下面是我要修改的功能,因为我们可以看到它接受当前格式,但是我想更改格式。
导入日期时间 导入时间
def time_offset(thetime):
value = thetime.type
time = thetime.amount
ch = self.state //I use integers since now you can just pass ch*time instead of checking for '-' or '+'
另一种选择是使h
不再是一种使用物品,它不是保存数据,而是使用乘法来返回数据。然后该类变为:
class mytime:
def __init__(self,type):
self.type=type
def __mul__(self,x):
return (x,self.type) #x contains the negative sign if needed
__rmul__ = __mul__
def __neg__(self):
return (-1,self.type)
def __pos__(self):
return (1,self.type)
在这种方法中,您不能仅仅拥有h
,因为time_offset(h)
的行为会有所不同-或者您可以确保其具有适当的元组行为,例如,__getitem__
被定义为:>
def __getitem__(self,i):
return (1,self.type)[i]