如何解析时间函数参数以接受python中的某种格式

时间:2019-06-25 15:35:57

标签: python datetime

我创建了以下函数,该函数将根据用户提供的内容为用户计算时间,即如果用户提供(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

1 个答案:

答案 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]