Python学习(内置日期函数 )——timedelta()应用案例

本文详细介绍了Python中的timedelta类,如何表示和操作时间差,包括表示固定天数、计算日期差异、与日期结合以及在生日悖论中的应用。
摘要由CSDN通过智能技术生成

在Python中,内置有丰富的日期操作函数,下面是timedelta()函数详细介绍及应用。

在Python中,timedelta 是一个表示时间差的类,它属于 datetime 模块。timedelta 对象表示两个日期或时间之间的差异。

当你想要表示一段时间,比如几天、几小时或几分钟,而不是一个特定的日期或时间时,timedelta 非常有用。

下面是一些使用 timedelta 的例子:

1、表示几天的差异

from datetime import timedelta  
  
# 创建表示5天的timedelta对象  
td = timedelta(days=5)  
print(td)  # 输出:5 days, 0:00:00

2、计算两个日期之间的差异

from datetime import date  
  
d1 = date(2023, 7, 1)  
d2 = date(2023, 7, 10)  
delta = d2 - d1  # 这会返回一个timedelta对象,表示两日期之间的天数差异  
print(delta)  # 输出:9 days, 0:00:00

3、将timedelta对象加到日期上

from datetime import date  
  
d = date(2023, 7, 1)  
d += timedelta(days=10)  # 在日期上加10天  
print(d)  # 输出:2023-07-11

4、表示时间间隔
除了表示天数,timedelta 还可以表示小时、分钟、秒等时间间隔。例如:

from datetime import timedelta  
  
# 表示1小时30分钟的时间间隔  
td = timedelta(hours=1, minutes=30)  
print(td)  # 输出:1:30:00

总的来说,timedelta 提供了一种方便的方式来表示和操作时间间隔,这在处理日期和时间时非常有用。

imedelta() 默认参数是 days=0, seconds=0, microseconds=0。这意味着如果你不提供任何参数,它会返回一个表示0天、0秒和0微秒的时间差对象。

如果 timedelta() 只有一个整数参数,那么这个参数代表天数。例如,timedelta(5) 表示5天的时间差。其他的时间单位(如小时、分钟、秒和微秒)不会被考虑在内。

下面代码使用timedeltr()函数,生成一年中的随机的日期:

# 假定2001年
# 通过datetime()获取2001年1月1日
startOfYear = datetime.date(2001,1,1)  

# 随机获取一年中一天
# random.randint(a, b)函数会返回一个介于a和b(包括a和b)之间的随机整数
# randomNumberOfDays是[1,364]之间的整数
randomNumberOfDays = datetime.timedelta(random.randint(0,364))
# 2001年期间的随机的一天
randomDay = startOfYear + randomNumberOfDays

下面代码,设计一个函数,参数是整数,根据参数n,生成n个人的随机生日。

def getRandomBirthdays(people_number):
    '''返回一个随机生日日期对象的数字列表

    :param people_number: 人员数量
    :type int
    '''
    birthdays = []
    for i in range(people_number):
        # 获取每年的第一天,年份可根据需要更改
        startOfYear = datetime.date(2001,1,1)

        # 随机获取一年中一天
        randomNumberOfDays = datetime.timedelta(random.randint(0,364))
        birthday = startOfYear + randomNumberOfDays
        birthdays.append(birthday)
    
    return birthdays

以上为学习Al Sweigart 撰写的“生日悖论”代码,附录如下:

# //
# 生日悖论
# 作者:Al Sweigart
# 生日悖论又称为“生日问题”,是指即使在很少的一群人中两人的生日相同概率也是惊人的。
# 在一个70人的组中,两人生日相同的概率高达99%
# 在一个23人的组中,两人生日相同的概率高达50%
# 下面代码用于进行多个概率实验,计算不同规模小组中生日相同的概率值
# 这类实现称为蒙特卡罗实验。在这类实验中,我们需要进行多次随机实验,以了解可能的结果。
# //

import datetime,random

def getBirthdays(people_number):
    '''返回一个随机生日日期对象的数字列表
    
    :param people_number: 人员数量
    '''
    birthdays = []
    for i in range(people_number):
        # 年份对于模拟不重要,假设所有生日在同一年
        startOfYear = datetime.date(2001,1,1)

        # 随机获取一年中一天
        randomNumberOfDays = datetime.timedelta(random.randint(0,364))
        birthday = startOfYear + randomNumberOfDays
        birthdays.append(birthday)
    
    return birthdays

def getMatch(birthdays):
    '''返回在生日列表中多次出现的日期对象'''
    if len(birthdays) == len(set(birthdays)):  # 集合set()函数可以对列表进行初重
        return None                            # 所有生日都不同,返回None
    
    # 将这个日期与其它日期进行比较
    for a,birthdayA in enumerate(birthdays):
        for b,birthdayB in enumerate(birthdays[a+1 :]):   # 列表是有序数据类型,只需前一个元素向后比较
            if birthdayA == birthdayB:
                return birthdayA                          # 返回相同的日期


if __name__ == '__main__':
    # 打印介绍信息
    print('''**********************************************************************
* <<生日悖论>> 作者:Al Sweigart 
* 生日悖论向我们表明,在一群N人中,其中两个人有相同的生日的几率大得惊人。
* 这个程序执行了一个蒙特卡洛模拟(即,重复的随机模拟)来探索这个概念。
* (这实际上并不是一个悖论,而是一个令人惊讶的结果。)
**********************************************************************
''')
    # 创建一个按照月份排序的元组
    MONTHS = ('Jan','Feb','Mar','Apr','May','Jun',
              'Jul','Aug','Sep','Oct','Nov','Dec')
   
    while True:
        print('请输入一个大于1,最大不超过100的整数数字')
        people_num_input = input('>')
        if people_num_input.isdecimal() and (1 < int(people_num_input) <=100):
            people_num = int(people_num_input)       # 组人数
            break                          # 输入了有效的人数数量,结束循环

    print()  # 打印一个空行

    # 显示生成的生日
    print('*** <',people_num,'>组,随机产生如下生日:')
    birthdays = getBirthdays(people_num)
    for i ,birthday in enumerate(birthdays):
        if i != 0:
            # 每个生日之间用逗号隔开
            print(', ',end='')
        monthName = MONTHS[birthday.month -1]
        dateText = '{} {}'.format(monthName,birthday.day)
        print(dateText,end='')

    print()
    print()

    # 确定是否存在两个相同的生日
    match = getMatch(birthdays)

    # 显示结果
    print('进行单次随机模拟测试的结果: ', end='')
    if match != None:
        monthName = MONTHS[birthday.month -1]
        dateText = '{} {}'.format(monthName,match.day)
        print('在{}这一天,有多人生日'.format(dateText))
    else:
        print('没有相同生日的人员.')

    print()
    
    # 运行100000次模拟
    print('*** 生成<',people_num,'人>组,10万次,随机测验模拟,请稍候......\n')
    simMatch = 0  # 模拟中有多少相同的生日
    for i in range(100000):
        # 每10000万次模拟后输出当前进度
        if i % 10000 == 0:
            print(i,'模拟进行中.....')
        birthdays = getBirthdays(people_num)
        if getMatch(birthdays) != None:
            simMatch += 1
    print ('100000次模拟测试结束。')

    # 打印机构
    probablility = round(simMatch / 100000 * 100 ,2)
    print('\n***10万次模拟测试结束, ', people_num, '人组,有相同生日人员的概率:',probablility,'%')
                         


    

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python中的timedelta函数是用来表示时间间隔的类,它可以用来计算两个日期或时间之间的差值。timedelta函数可以接受多个参数,包括days、seconds、microseconds、milliseconds、minutes、hours和weeks等,用于表示不同的时间单位。timedelta函数可以用于日期的加减运算,例如可以将一个日期加上一定的天数或小时数,得到一个新的日期timedelta函数Python中的datetime模块中定义,可以通过import datetime来引入。 ### 回答2: Python中的时间模块中,timedelta函数是一种非常方便的计算日期和时间的方法。它是以天、小时、分钟、秒以及毫秒为单位的时间间隔。 timedelta函数的输入参数可以是天数(days)、小时数(hours)、分钟数(minutes)、秒数(seconds)以及微秒数(microseconds)。 timedelta函数的输出结果是时间差,以days、seconds、microseconds三个属性来表示。输出结果可以参与日期时间的计算操作,比如可以用timedelta来计算未来或者过去的时间点,也可以用它来计算两个时间点之间的时间差,从而完成若干时间处理操作。 使用timedelta函数可以方便实现比如定时任务之类的操作。比如我们可以创建一个时间差(timedelta)对象,然后和当前时间比较,如果两个时间点之间的差距大于预设的时间间隔,则执行相应的操作。 使用timedelta函数需要注意以下几点: 1、timedelta输出的时间差是不能与datetime对象直接进行加减运算,必须通过datetime对象的加减操作来实现。 2、timedelta函数的参数必须是整数类型,否则会报错。 3、timedelta函数也支持负数参数,比如可以用timedelta表示前一天、前一小时、前一分钟等时间间隔。 总之,timedelta函数Python中一个非常实用、方便的时间处理函数,在进行时间处理相关任务时,可以更加高效地完成工作。 ### 回答3: Python中的timedelta函数是datetime模块中用于处理时间差的函数。它可以用来计算两个日期之间的时间差,并且可以通过加法或减法来修改日期timedelta函数的常见用法如下: 1.创建时间差对象 ```python import datetime delta = datetime.timedelta(days=2, hours=12, minutes=30) ``` 上面的代码创建了一个时间差对象,该对象表示2天12小时30分钟的时间差。我们可以用这个时间差对象来进行一些操作。 2.加法和减法 我们可以通过加法和减法来修改日期。 ```python import datetime t1 = datetime.datetime.now() delta = datetime.timedelta(days=2) t2 = t1 + delta # t2是t1+2天后的日期 t3 = t1 - delta # t3是t1-2天后的日期 ``` 上面的代码中,通过加上时间差对象,我们可以得到当前时间的2天/减去2天的日期。 3.时间差转换 我们可以将时间差对象转化为总秒数、总分钟数等。 ```python import datetime delta = datetime.timedelta(days=2, hours=12, minutes=30) total_seconds = delta.total_seconds() # 返回总秒数 total_minutes = int(total_seconds / 60) # 返回总分钟数 ``` 上面的代码中,通过使用total_seconds()函数,我们可以把时间差对象转换成总秒数,然后通过计算将其转换为总分钟数。 4.时间差比较 我们可以使用大小比较运算符进行时间差的比较操作。 ```python import datetime delta1 = datetime.timedelta(days=2) delta2 = datetime.timedelta(days=4) if delta1 < delta2: print("delta1小于delta2") else: print("delta1大于或等于delta2") ``` 上面的代码中,如果delta1的时间差小于delta2的时间差,则会输出“delta1小于delta2”。 总之,Python中的timedelta函数可以很方便地处理时间差,使用户能够轻松地计算日期之间的时间差。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值