datetime库的常用方法

 

1.日期字符串转换

#datetime
from datetime import datetime
#####日期字符串转换:
'''字符串转日期datetime.strptime(str,format),类方法'''
date_str = "2023-03-15"
date_obj = datetime.strptime(date_str, "%Y-%m-%d") 

'''日期转字符串time.strftime(format),实例方法'''
output = date_obj.strftime("%Y/%m/%d %A") # 输出:2023/03/15 Wednesday
print(output)
'''
代码	含义	示例
%Y	四位数年份	2023
%y	两位数年份	23
%m	补零月份(01-12)	07
%d	补零日期(01-31)	05
%H	24小时制小时	14
%M	分钟(00-59)	05
%A	星期全称(Locale)	Wednesday
%a	星期缩写	Wed
'''

 2.时间间隔利用:推算时间,计算时差

#####时间间隔计算:

from datetime import datetime, timedelta

# 计算日期差
date1 = datetime(2023, 1, 1)'''datetime(2023,1,1) 是一个创建日期对象的函数调用,类方法''
date2 = datetime(2023, 12, 31)
delta = date2 - date1
print(delta.days)  '''# 输出:364 实例属性调用'''

# 日期推算
new_date = date1 + timedelta(days=100)
'''
#timedelta(days=100) 表示一个 100 天的时间间隔,当做数字用。类方法
#timedelta 还可以接受其他参数,
#如 seconds、microseconds、milliseconds、minutes、hours 和 weeks,用于表示更细粒度的时间差。
'''
print(new_date)  # 2023-04-11 00:00:00

# 复杂时间计算
new_time = datetime(2023,7,20,14,30) + timedelta(hours=3, minutes=15)
print(new_time)  # 2023-07-20 17:45:00

帮助记忆:timedelta,时间差,delta: 

3.星期计算 

#####星期计算
date = datetime(2023,7,20)
print(date.weekday())     # 3(星期四)
print(date.isoweekday())  # 4(星期四)
'''
#isoweekday”用于返回当前日期是星期几,返回值是整数,范围是1到7,其中1代表星期一,2代表星期二,一直到7代表星期日。实例方法
#weekday()0-6,周一至周六,实例方法

4.闰年判断

# 方法1:datetime库特性
def is_leap(year):
    try:
        datetime(year,2,29)#闰年才有2/29
        return True
    except ValueError:
        return False
'''
#try:
#如果代码块中的语句正常执行那么程序会继续执行 “try:” 后面的代码;
#如果代码块中的语句引发了异常,程序会跳过 “try:” 块中剩余的代码,转而执行与之匹配的 “except:” 块中的代码
'''
# 方法2:计算逻辑
def is_leap(year):
    return year%4==0 and (year%100!=0 or year%400==0)#闰年定义

5.时间戳处理 

#####时间戳
# 日期转时间戳
ts = datetime(2023,3,15).timestamp() # 1678838400.0
'''“timestamp()”它的作用是将datetime对象转换为时间戳(timestamp)。实例方法
时间戳是指从1970年1月1日00:00:00 UTC(协调世界时)开始,经过的秒数(不考虑闰秒),它是一个浮点数。
'''
# 时间戳转日期
date_obj = datetime.fromtimestamp(1678838400)
'''fromtimestamp”这个方法的作用是将一个时间戳转换为一个 datetime 对象。实例方法

6.竞赛技巧:

'''1.处理多组日期输入,快速输入'''
n = int(input())
dates = [datetime.strptime(input().strip(), "%Y%m%d") for _ in range(n)]
'''2.避免闰年陷阱'''
def safe_date(year, month, day):
    try:
        return datetime(year, month, day)
    except ValueError:
        return None  # 无效日期处理
'''3.性能优化'''
#预处理日期数据到字典加速查询
week_cache = {}
for y in range(2000,2024):
    for m in range(1,13):
        key = f"{y}-{m}"
        week_cache[key] = datetime(y,m,1).isoweekday()


'''strip()部分
- 这是一个字符串方法。它的作用是移除字符串头尾指定的字符,默认情况下是移除字符串头尾的空白字符,包括空格、制表符(\t)、换行符(\n)等。例如,如果有一个字符串s="  hello world  ",那么s.strip()的结果就是"hello world",去掉了字符串两端的空格。

所以“input().strip()”组合起来的作用就是获取用户输入的字符串,并且去除这个字符串两端的空白字符。
'''

7.练习题: 

1)计算1901-1-1到2000-12-31之间的每个月的第一天是星期一的天数

2)计算2023-03-15到2024-02-10之间的天数

#1)
count = 0
for year in range(1901,2001):
    for month in range(1,13):
        if datetime(year, month, 1).weekday() == 0: # Monday=0
            count +=1
print(count) # 正确答案:172
#2)
days = (datetime(2024,2,10) - datetime(2023,3,15)).days # 332天

Python datetimePython标准中的一个模块,用于处理日期和时间相关的数据。它提供了一系列类和方法,可以用于处理日期、时间、时间间隔、时区等相关操作。 datetime中最常用的类是datetime类,它表示一个日期和时间的组合。该类的构造函数可以接受多种参数,包括年、月、日、时、分、秒等。另外,该类还提供了一系列方法,可以用于计算日期之间的差值、格式化日期、转换时区等操作。 除了datetime类外,datetime还提供了date类和time类,分别表示日期和时间。同时,还提供了timedelta类,用于表示时间间隔。 下面是一个简单的例子,演示了如何使用datetime来处理日期和时间: ```python import datetime # 获取当前时间 now = datetime.datetime.now() # 格式化输出当前时间 print(now.strftime("%Y-%m-%d %H:%M:%S")) # 计算两个日期之间的差值 d1 = datetime.date(2021, 1, 1) d2 = datetime.date(2021, 1, 10) delta = d2 - d1 print(delta.days) # 转换时区 from_zone = datetime.timezone.utc to_zone = datetime.timezone(datetime.timedelta(hours=8)) utc_time = datetime.datetime.utcnow() utc_time = utc_time.replace(tzinfo=from_zone) local_time = utc_time.astimezone(to_zone) print(local_time.strftime("%Y-%m-%d %H:%M:%S")) ``` 输出结果为: ``` 2021-07-20 16:49:48 9 2021-07-21 00:49:48 ``` 以上代码演示了当前时间的获取和格式化输出、日期之间的差值计算、以及时区的转换等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值