【问题标题】:How to compare dates (in string)?如何比较日期(字符串)?
【发布时间】:2020-07-22 06:46:32
【问题描述】:

我想通过两个日期之间的特定规则来确定费用。问题是输入不是日期格式,而是:

6 6 2020
9 9 2020

条件如下:

  1. 如果是同一天,则固定成本为 20。
  2. 如果在一天之后但仍在一个月内,则成本 = 30 *(天数)。
  3. 如果一个月后但仍在一年内,则成本 = 1000 *(月数)。
  4. 如果在创建一年之后,则固定成本为 20000。

如何仅通过更改 cost() 来比较它们?

我尝试过的远非完美,并且已经使用了太多分支:

def cost(d1, m1, y1, d2, m2, y2):
    yd=0
    md=0
    dd = 0
    if (y1==y2):
        yd=0
    else: yd=abs(y1-y2)
    if (m1==m2):
        md=0
    else: md=abs(m1-m2)
    if (d1==d2):
        dd=0
    else: dd=abs(d1-d2)
    cost = int()
    if (md>11 or yd>0):
        cost = 20000
    elif (md>0 and md<12):
        cost = 1000*md
    elif (dd==0 and md==0 and yd==0):
        cost = 20
    elif (dd>0 and md==0 and yd==0):
        cost = dd*30
    print("yd=",yd)
    print("md=",md)
    print("dd=",dd)
    return cost

if __name__ == '__main__':
    #d1M1Y1 = input().split()
    d1M1Y1 = [6,1,2020]
    d1 = int(d1M1Y1[0])
    m1 = int(d1M1Y1[1])
    y1 = int(d1M1Y1[2])

    #d2M2Y2 = input().split()
    d2M2Y2 = [4,1,2021]
    d2 = int(d2M2Y2[0])
    m2 = int(d2M2Y2[1])
    y2 = int(d2M2Y2[2])
    
    result = server_cost(d1, m1, y1, d2, m2, y2)
    print(str(result) + '\n')

【问题讨论】:

  • 您最好将字符串转换为日期,然后进行比较。
  • 为什么不使用datetime.strpdate()将字符串解码为datetime.datetime,然后您可以使用&gt; &lt;比较值
  • @RA3 是否允许如上所述将输入转换为日期时间?检查date time。最佳
  • 然后您可以减去日期并获得天数和月数,而无需担心复杂的逻辑。
  • 我建议您在结束日期上增加 1 天以简化您的逻辑。当您减去日期时,如果差异为 1 天,则为 20,如果差异大于 1 天但小于一个月,则直接将天数差异乘以 30,依此类推。否则你会陷入极端情况。

标签: python date


【解决方案1】:
import datetime
def cost(d1, m1, y1, d2, m2, y2):
    date1 = datetime.datetime(y1, m1, d1)
    date2 = datetime.datetime(y2, m2, d2)
    delta = date2 - date1
    if delta.days <= 1:
        return 20
    elif delta.days < 30:
        return 30 * delta.days
    elif delta.days < 365:
        return 1000 * (delta.days//12) # use a function that suits your def of months
    else:
        return 20000

    

【讨论】:

    【解决方案2】:

    如评论中所述,最好转换为日期时间

    例如

    import datetime
    
    d1M1Y1 = [6,1,2020]
    d1 = int(d1M1Y1[0])
    m1 = int(d1M1Y1[1])
    y1 = int(d1M1Y1[2])
    
    #d2M2Y2 = input().split()
    d2M2Y2 = [4,1,2021]
    d2 = int(d2M2Y2[0])
    m2 = int(d2M2Y2[1])
    y2 = int(d2M2Y2[2])
    
    
    date1 = datetime.datetime(y1, m1, d1)
    
    date2 = datetime.datetime(y2, m2, d2)
    
    print(date1)
    print(date2)
    

    编辑:处理日期时间差异的演示

    dateTimeDifference = date2 - date1
    
    # Datedifferene in days
    daysDifference = dateTimeDifference.total_seconds() / 86400
    print(daysDifference)
    
    if daysDifference > 365:
        print ("More than a year")
    
    else:
        print("Less than a year")
    

    【讨论】:

    • 要提供完整的答案,请展示如何操作日期时间间隔。
    【解决方案3】:
    import time
    import datetime
    
    def str_to_date(str):
        fmt = '%d %m %Y'
        time_tuple = time.strptime(str, fmt)
        day, month, year = time_tuple[:3]
        a_date = datetime.date(day, month, year)
        return a_date
    
    a = str_to_date('22 7 2020')
    b = str_to_date('5 8 2019')
    
    c = abs(a-b)
    if c.days<=1:
        cost=20
    elif c.days<30:
        cost=30*c.days
    elif c.days<365:
        cost=1000*(c.days//30)
    else:
        cost=20000
    
    print(cost)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多