Python的datetime
模块提供了用于操作日期和时间的类和方法,允许我们轻松处理和格式化日期和时间。
datetime模块概述
datetime
模块主要包含以下几个类:
datetime.date
:表示日期(年、月、日)。datetime.time
:表示时间(时、分、秒、微秒)。datetime.datetime
:表示日期和时间。datetime.timedelta
:表示时间间隔,精确到微秒。datetime.tzinfo
:与时区相关的信息对象。
导入datetime模块
在开始使用datetime
模块之前,需要先导入:
import datetime
日期类(date)
创建日期对象
可以通过datetime.date
类创建一个日期对象:
import datetime
# 创建一个日期对象
d = datetime.date(2024, 7, 18)
print(d) # Output: 2024-07-18
获取当前日期
使用today()
方法可以获取当前日期:
import datetime
# 获取当前日期
today = datetime.date.today()
print(today) # Output: 2024-07-18
获取日期的各个部分
可以通过year
、month
、day
属性获取日期的年、月、日:
import datetime
d = datetime.date(2024, 7, 18)
print(d.year) # Output: 2024
print(d.month) # Output: 7
print(d.day) # Output: 18
日期格式化
可以使用strftime
方法将日期对象格式化为字符串:
import datetime
d = datetime.date(2024, 7, 18)
formatted_date = d.strftime("%Y-%m-%d")
print(formatted_date) # Output: 2024-07-18
常见的格式化代码包括:
%Y
:四位数的年份。%m
:两位数的月份(01-12)。%d
:两位数的日期(01-31)。%A
:星期的完整名称。%a
:星期的缩写名称。%B
:月份的完整名称。%b
:月份的缩写名称。
解析字符串为日期
可以使用strptime
方法将字符串解析为日期对象:
import datetime
date_string = "2024-07-18"
d = datetime.datetime.strptime(date_string, "%Y-%m-%d").date()
print(d) # Output: 2024-07-18
时间类(time)
创建时间对象
可以通过datetime.time
类创建一个时间对象:
import datetime
# 创建一个时间对象
t = datetime.time(12, 34, 56)
print(t) # Output: 12:34:56
获取时间的各个部分
可以通过hour
、minute
、second
、microsecond
属性获取时间的时、分、秒和微秒:
import datetime
t = datetime.time(12, 34, 56, 789000)
print(t.hour) # Output: 12
print(t.minute) # Output: 34
print(t.second) # Output: 56
print(t.microsecond) # Output: 789000
时间格式化
可以使用strftime
方法将时间对象格式化为字符串:
import datetime
t = datetime.time(12, 34, 56)
formatted_time = t.strftime("%H:%M:%S")
print(formatted_time) # Output: 12:34:56
常见的格式化代码包括:
%H
:两位数的小时(00-23)。%M
:两位数的分钟(00-59)。%S
:两位数的秒(00-59)。%f
:微秒(000000-999999)。
解析字符串为时间
可以使用strptime
方法将字符串解析为时间对象:
import datetime
time_string = "12:34:56"
t = datetime.datetime.strptime(time_string, "%H:%M:%S").time()
print(t) # Output: 12:34:56
日期时间类(datetime)
创建日期时间对象
可以通过datetime.datetime
类创建一个日期时间对象:
import datetime
# 创建一个日期时间对象
dt = datetime.datetime(2024, 7, 18, 12, 34, 56)
print(dt) # Output: 2024-07-18 12:34:56
获取当前日期时间
使用now()
方法可以获取当前日期和时间:
import datetime
# 获取当前日期时间
now = datetime.datetime.now()
print(now) # Output: 2024-07-18 12:34:56.789000
获取日期时间的各个部分
可以通过year
、month
、day
、hour
、minute
、second
、microsecond
属性获取日期时间的各个部分:
import datetime
dt = datetime.datetime(2024, 7, 18, 12, 34, 56, 789000)
print(dt.year) # Output: 2024
print(dt.month) # Output: 7
print(dt.day) # Output: 18
print(dt.hour) # Output: 12
print(dt.minute) # Output: 34
print(dt.second) # Output: 56
print(dt.microsecond) # Output: 789000
日期时间格式化
可以使用strftime
方法将日期时间对象格式化为字符串:
import datetime
dt = datetime.datetime(2024, 7, 18, 12, 34, 56)
formatted_datetime = dt.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_datetime) # Output: 2024-07-18 12:34:56
解析字符串为日期时间
可以使用strptime
方法将字符串解析为日期时间对象:
import datetime
datetime_string = "2024-07-18 12:34:56"
dt = datetime.datetime.strptime(datetime_string, "%Y-%m-%d %H:%M:%S")
print(dt) # Output: 2024-07-18 12:34:56
时间间隔类(timedelta)
创建时间间隔对象
可以通过datetime.timedelta
类创建一个时间间隔对象:
import datetime
# 创建一个时间间隔对象
delta = datetime.timedelta(days=5, hours=12, minutes=30)
print(delta) # Output: 5 days, 12:30:00
时间间隔的运算
时间间隔对象可以用于日期时间对象之间的运算:
import datetime
# 当前日期时间
now = datetime.datetime.now()
# 创建一个时间间隔对象
delta = datetime.timedelta(days=5)
# 日期时间加上时间间隔
future_date = now + delta
print(future_date)
# 日期时间减去时间间隔
past_date = now - delta
print(past_date)
时间间隔的属性
可以通过days
、seconds
、microseconds
属性获取时间间隔的天数、秒数和微秒数:
import datetime
delta = datetime.timedelta(days=5, hours=12, minutes=30)
print(delta.days) # Output: 5
print(delta.seconds) # Output: 45000 (12 hours * 3600 + 30 minutes * 60)
print(delta.microseconds) # Output: 0
时区处理(timezone)
创建时区对象
可以通过datetime.timezone
类创建一个时区对象:
import datetime
# 创建一个UTC+8时区对象
tz = datetime.timezone(datetime.timedelta(hours=8))
print(tz) # Output: UTC+08:00
日期时间对象与时区
可以将日期时间对象与时区关联:
import datetime
# 创建一个UTC+8时区对象
tz = datetime.timezone(datetime.timedelta(hours=8))
# 创建一个带时区的日期时间对象
dt = datetime.datetime(2024, 7, 18, 12, 34, 56, tzinfo=tz)
print(dt) # Output: 2024-07-18 12:34:56+08:00
将日期时间对象转换为不同的时区
可以使用astimezone
方法将日期时间对象转换为不同的时区:
import datetime
# 创建一个UTC时区对象
utc_tz = datetime.timezone.utc
# 创建一个UTC+8时区对象
tz_utc_plus_8 = datetime.timezone(datetime.timedelta(hours=8))
# 当前UTC时间
now_utc = datetime.datetime.now(utc_tz)
# 将UTC时间转换为UTC+8时区时间
now_utc_plus_8 = now_utc.astimezone(tz_utc_plus_8)
print(now_utc_plus_8)
datetime模块的其他功能
日期时间的比较
日期时间对象支持比较运算:
import datetime
dt1 = datetime.datetime(2024, 7, 18, 12, 34, 56)
dt2 = datetime.datetime(2024, 7, 19, 12, 34, 56)
print(dt1 < dt2) # Output: True
print(dt1 > dt2) # Output: False
print(dt1 == dt2) # Output: False
日期时间的替换
可以使用replace
方法替换日期时间对象的某些部分:
import datetime
dt = datetime.datetime(2024, 7, 18, 12, 34, 56)
# 替换年份
new_dt = dt.replace(year=2025)
print(new_dt) # Output: 2025-07-18 12:34:56
# 替换月份和小时
new_dt = dt.replace(month=8, hour=14)
print(new_dt) # Output: 2024-08-18 14:34:56
日期时间的ISO格式
可以使用isoformat
方法将日期时间对象格式化为ISO 8601标准的字符串:
import datetime
dt = datetime.datetime(2024, 7, 18, 12, 34, 56)
# ISO 8601格式
iso_format = dt.isoformat()
print(iso_format) # Output: 2024-07-18T12:34:56
综合实例
计算两个日期之间的天数差
import datetime
date1 = datetime.date(2024, 7, 18)
date2 = datetime.date(2025, 7, 18)
# 计算日期差
delta = date2 - date1
print(delta.days) # Output: 365
计算两个时间之间的秒数差
import datetime
time1 = datetime.datetime.strptime("12:34:56", "%H:%M:%S")
time2 = datetime.datetime.strptime("14:36:58", "%H:%M:%S")
# 计算时间差
delta = time2 - time1
print(delta.total_seconds()) # Output: 7322.0
处理不同格式的日期字符串
import datetime
date_string1 = "2024-07-18"
date_string2 = "18/07/2024"
# 将不同格式的日期字符串解析为日期对象
date1 = datetime.datetime.strptime(date_string1, "%Y-%m-%d").date()
date2 = datetime.datetime.strptime(date_string2, "%d/%m/%Y").date()
print(date1) # Output: 2024-07-18
print(date2) # Output: 2024-07-18
按指定格式输出当前时间
import datetime
now = datetime.datetime.now()
# 按不同格式输出当前时间
print(now.strftime("%Y-%m-%d %H:%M:%S")) # Output: 2024-07-18 12:34:56
print(now.strftime("%A, %d %B %Y %I:%M:%S %p")) # Output: Thursday, 18 July 2024 12:34:56 PM
计算特定日期之后的日期
import datetime
# 当前日期
now = datetime.date.today()
# 计算30天后的日期
future_date = now + datetime.timedelta(days=30)
print(future_date) # Output: 2024-08-17
Python的datetime
模块提供了丰富的功能来处理日期和时间。通过了解和掌握datetime
模块中的各个类和方法,我们可以轻松完成日期和时间的创建、格式化、计算以及时区处理等任务。