datetime 是 Python 标准库中的一个模块,用于处理日期和时间。它提供了多种类来表示日期、时间、时间和日期的组合等,并支持各种操作如创建、格式化、解析、计算等。
官网:datetime — 基本日期和时间类型
主要类
datetime.date:表示日期(年、月、日)。
datetime.time:表示时间(时、分、秒、微秒)。
datetime.datetime:表示日期和时间的组合。
datetime.timedelta:表示两个日期或时间之间的差异。
1.导入模块
from datetime import datetime, date, time, timedelta
2.创建date对象
# 当前日期
today = date.today()
print("今天的日期:", today)
# 指定日期
specified_date = date(2025, 2, 8)
print("指定日期:", specified_date)
输出
今天的日期: 2025-02-08
指定日期: 2025-02-08
3.创建time对象
# 特定时间
specific_time = time(14, 30, 59) # 14:30:59
print("特定时间:", specific_time)
输出
特定时间: 14:30:59
4.创建 datetime 对象
# 当前日期和时间
now = datetime.now()
print("当前日期和时间:", now)
# 特定日期和时间
specific_datetime = datetime(2024, 2, 8, 14, 30, 59)
print("特定日期和时间:", specific_datetime)
输出
当前日期和时间: 2025-02-08 02:29:40.887952
特定日期和时间: 2024-02-08 14:30:59
格式化日期和时间
可以使用 strftime 方法将 datetime 对象格式化为字符串,或者使用 strptime 方法将字符串解析为 datetime 对象。
# 格式化日期和时间
formatted_now = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化后的当前日期和时间:", formatted_now)
# 解析字符串为 datetime 对象
date_string = "2024-02-08 14:30:59"
parsed_datetime = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print("解析后的日期和时间:", parsed_datetime)
常用格式化代码:
%Y: 年(四位数)
%m: 月(两位数)
%d: 日(两位数)
%H: 小时(24小时制,两位数)
%M: 分钟(两位数)
%S: 秒(两位数)
计算日期和时间差
使用 timedelta 类来进行日期和时间的加减运算。
# 当前日期和时间
now = datetime.now()
print("当前日期和时间:", now)
# 创建一个时间间隔
delta = timedelta(days=5, hours=3, minutes=30)
# 当前日期加上时间间隔
future_date = now + delta
print("未来的日期和时间:", future_date)
# 当前日期减去时间间隔
past_date = now - delta
print("过去的日期和时间:", past_date)
输出
当前日期和时间: 2025-02-08 02:28:14.850259
未来的日期和时间: 2025-02-13 05:58:14.850259
过去的日期和时间: 2025-02-02 22:58:14.850259
获取日期和时间的部分信息
可以从 datetime 或 date 对象中提取部分信息。
# 获取年份
year = now.year
print("年份:", year)
# 获取月份
month = now.month
print("月份:", month)
# 获取天
day = now.day
print("天:", day)
# 获取小时
hour = now.hour
print("小时:", hour)
# 获取分钟
minute = now.minute
print("分钟:", minute)
# 获取秒
second = now.second
print("秒:", second)
# 获取星期几 (0=Monday, 6=Sunday)
weekday = now.weekday()
print("星期几:", weekday)
计算两个日期之间的天数差
from datetime import datetime
def days_between(date_str1, date_str2):
# 将字符串解析为 datetime 对象
date_format = "%Y-%m-%d"
date1 = datetime.strptime(date_str1, date_format)
date2 = datetime.strptime(date_str2, date_format)
# 计算日期差
delta = date2 - date1
return abs(delta.days)
# 测试
date_str1 = "2024-01-01"
date_str2 = "2024-02-08"
print(f"两个日期之间的天数差: {days_between(date_str1, date_str2)}")
例题1
题目:特殊日期
代码
"""
# 导入模块
import datetime
# 求数字各位数之和
def Sum(x:int)->int:
res = 0
while x:
res+=x%10
x//=10
return res
# 输入区间
start = datetime.date(1900,1,1)
end = datetime.date(9999,12,31)
# 创建一个表示一天的时间间隔
dt = datetime.timedelta(days=1)
# 总数量
cnt =0
while start<end:
y = Sum(start.year)
md = Sum(start.month)+Sum(start.day)
if y==md:
cnt+=1
start += dt
print(cnt)
"""
print(70910)
例题2
题目:完全日期
代码
from datetime import datetime, timedelta
def sum_of_digits(date_str):
"""计算日期字符串中所有数字的和"""
return sum(int(digit) for digit in date_str)
def count_perfect_dates(start_date, end_date):
"""计算在指定日期范围内完全日期的数量"""
perfect_squares = {i ** 2 for i in range(1, 10)} # 完全平方数集合
current_date = start_date
count = 0
while current_date <= end_date:
date_str = current_date.strftime('%Y%m%d') # 格式化日期为字符串
digits_sum = sum_of_digits(date_str)
if digits_sum in perfect_squares:
count += 1
current_date += timedelta(days=1)
return count
start_date = datetime.strptime('2001-01-01', '%Y-%m-%d')
end_date = datetime.strptime('2021-12-31', '%Y-%m-%d')
result = count_perfect_dates(start_date, end_date)
print( result) # 977