python 基本日期和时间类型 datetime
datetime 说明
datetime 模块提供了处理日期和时间的类。它可以帮助你执行日期和时间的计算、转换以及格式化等操作。模块包含了日期(date)、时间(time)、日期时间(datetime)、时间间隔(timedelta)、时区(tzinfo)等类。
datetime 类:用于操作日期和时间的类,包括年、月、日、时、分、秒等信息。
date 类:表示日期的类,包括年、月、日。
time 类:表示时间的类,包括时、分、秒、微秒。
timedelta 类:表示时间间隔的类,用于计算日期时间之间的差异。
date
描述:用于表示日期。
用法:atetime.date(year, month, day)
year:年份
month:月份
day:日期
参数范围:
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= 日期 <= 给定年月对应的天数
from datetime import date
# 创建一个日期对象
d = date(2024, 4, 15) # 表示 2024 年 4 月 15 日
# 获取当前日期
d2 = date.today()
# 访问日期对象的属性
print("年份:", d.year) # 输出: 2024
print("月份:", d.month) # 输出: 4
print("日期:", d.day) # 输出: 15
print(d) # 输出: 2024-04-15
print(d2) # 输出: 2024-04-17
time
描述:用于表示时间。
用法:datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
hour:小时
minute:分钟
second:秒
microsecond:微秒
参数范围:
0 <= hour < 24,
0 <= minute < 60,
0 <= second < 60,
0 <= microsecond < 1000000,
fold in [0, 1].
from datetime import time
# 创建一个时间对象
t = time(9, 30, 15, 500000) # 表示 9:30:15.500000
# 访问时间对象的属性
print("小时:", t.hour) # 输出: 小时: 9
print("分钟:", t.minute) # 输出: 分钟: 30
print("秒:", t.second) # 输出: 秒: 15
print("微秒:", t.microsecond) # 输出: 微秒: 500000
print("时间字符串:", t.strftime("%H:%M:%S")) # 输出: 时间字符串: 09:30:15
print(t) # 输出: 09:30:15.500000
datetime
描述: datetime.datetime 类表示具体的日期和时间,包括年、月、日、时、分、秒等信息。可以使用这个类来执行日期时间的计算、比较和格式化操作。
用法:datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)。 year, month 和 day 参数是必须的。 tzinfo 可以是 None 或者是一个 tzinfo 子类的实例。如果参数超出范围,则抛出 ValueError 异常。
参数范围:
MINYEAR <= year <= MAXYEAR,
1 <= month <= 12,
1 <= day <= 指定年月的天数,
0 <= hour < 24,
0 <= minute < 60,
0 <= second < 60,
0 <= microsecond < 1000000,
fold in [0, 1].
datetime.today()
返回表示当前时区的 datetime 对象,其中 tzinfo 为 None。
from datetime import datetime
# 获取当前时间
now = datetime.today()
print(now) # 输出: 2024-04-17 16:57:46.834241
datetime.now()
返回表示当前时区的 date 和 time 对象。
from datetime import datetime
# 获取当前时间
now = datetime.now(tz=None)
print(now) # 输出: 2024-04-17 17:00:17.236580
datetime.fromtimestamp()
用法: datetime.fromtimestamp(timestamp, tz=None) 。
timestamp:要转换的时间戳,可以是浮点数或整数,代表从1970-01-01 00:00:00开始的秒数。
tz:可选参数,表示时区信息。
返回值: 返回一个 datetime 对象,表示从时间戳转换而来的日期时间。
from datetime import datetime
# 时间戳
timestamp = 1613541710 # 假设一个时间戳
# 根据时间戳创建 datetime 对象
dt_object = datetime.fromtimestamp(timestamp)
print("日期时间:", dt_object) # 输出: 日期时间: 2021-02-17 14:01:50
datetime.combine()
描述:是 datetime 模块中的一个方法,用于将给定的日期对象和时间对象结合在一起,形成一个新的 datetime 对象。
用法:datetime.combine(date, time, tzinfo=time.tzinfo)。
date:日期对象,表示年、月、日。
time:时间对象,表示时、分、秒等。
tzinfo:可选参数,表示时区信息,默认为 time.tzinfo。
from datetime import datetime, date, time
# 创建日期对象
d = date(2024, 4, 15)
# 创建时间对象
t = time(12, 30, 0)
# 合并日期和时间对象
dt_combined = datetime.combine(d, t)
print("合并后的日期时间:", dt_combined) # 输出: 合并后的日期时间: 2024-04-15 12:30:00
datetime.replace()
描述:用于创建一个新的日期时间对象,其中部分属性被替换为新的值。它允许你在不改变原始对象的情况下,创建一个新的日期时间对象,并指定想要更改的部分。
用法:datetime.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)
from datetime import datetime
# 创建一个日期时间对象
my_datetime = datetime(year=2024, month=4, day=17, hour=10, minute=30)
# 替换日期为5月1日,保持时间不变
new_datetime = my_datetime.replace(month=5, day=1)
# 输出结果
print("原始日期时间:", my_datetime) # 输出: 原始日期时间: 2024-04-17 10:30:00
print("替换后的日期时间:", new_datetime) # 输出: 替换后的日期时间: 2024-05-01 10:30:00
datetime.timestamp()
描述:用于将给定的日期时间对象转换为 POSIX 时间戳。POSIX 时间戳是指从公元 1970 年 1 月 1 日开始至特定日期时间的秒数。
用法:datetime.timestamp()
from datetime import datetime
# 创建一个日期时间对象
my_datetime = datetime(year=2024, month=4, day=17, hour=10, minute=30)
# 将日期时间对象转换为时间戳
timestamp = my_datetime.timestamp()
# 输出结果
print("日期时间对象:", my_datetime) # 输出: 日期时间对象: 2024-04-17 10:30:00
print("时间戳:", timestamp) # 输出: 时间戳: 1713321000.0
示例
from datetime import datetime
# 创建一个日期时间对象
my_date = datetime(2024, 4, 17) # 2024年4月17日是星期三
# 使用weekday()方法获取对应的星期几,返回值为0-6(星期一到星期日)
weekday_num = my_date.weekday()
# 使用isoweekday()方法获取对应的星期几,返回值为1-7(星期一到星期日)
iso_weekday_num = my_date.isoweekday()
# 使用isocalendar()方法返回一个三元组(年,周数,周的天)
iso_calendar = my_date.isocalendar()
print(f"{my_date.strftime('%Y-%m-%d')} 是 星期{weekday_num}") # 输出: 2024-04-17 是 星期2
print(f"{my_date.strftime('%Y-%m-%d')} 是 星期{iso_weekday_num}") # 输出: 2024-04-17 是 星期3
print(f"{my_date.strftime('%Y-%m-%d')} 是 公历{iso_calendar}") # 2024-04-17 是 公历datetime.IsoCalendarDate(year=2024, week=16, weekday=3)
timedelta
描述:用于表示时间间隔(timedelta)。
用法:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
days:表示时间间隔的天数部分。
seconds:表示时间间隔的秒数部分,不包括天数部分。
microseconds:表示时间间隔的微秒数部分,不包括天数和秒数部分。
参数单位的换算规则:
1毫秒会转换成1000微秒。
1分钟会转换成60秒。
1小时会转换成3600秒。
1星期会转换成7天。
参数范围:
0 <= microseconds < 1000000
0 <= seconds < 3600*24 (一天的秒数)
-999999999 <= days <= 999999999
from datetime import datetime, timedelta
# 创建一个时间间隔对象
delta = timedelta(days=5, hours=3, minutes=30)
# 执行日期时间的加法运算
current_datetime = datetime.now()
future_datetime = current_datetime + delta
print("当前日期时间:", current_datetime) # 当前日期时间: 2024-04-17 17:34:57.033476
print("5天3小时30分钟后的日期时间:", future_datetime) # 5天3小时30分钟后的日期时间: 2024-04-22 21:04:57.033476
tzinfo
用于处理时区信息。
from datetime import datetime, timedelta, tzinfo
class CustomTimeZone(tzinfo):
def utcoffset(self, dt):
return timedelta(hours=5) # 自定义时区偏移为+5小时
def dst(self, dt):
return timedelta(0) # 不使用夏令时
def tzname(self, dt):
return "Custom Time Zone" # 返回时区名字为 Custom Time Zone
# 创建一个自定义时区信息实例
custom_tz = CustomTimeZone()
# 创建一个带有自定义时区信息的日期时间对象
custom_datetime = datetime(2024, 4, 17, 12, 30, 0, tzinfo=custom_tz)
# 输出带有自定义时区信息的日期时间
print("自定义时区日期时间:", custom_datetime) # 自定义时区日期时间: 2024-04-17 12:30:00+05:00
print("时区偏移:", custom_datetime.utcoffset()) # 时区偏移: 5:00:00
print("时区名称:", custom_datetime.tzname()) # 时区名称: Custom Time Zone
strptime 和 strftime
用于日期时间的解析和格式化。
strftime |
strptime |
|
---|---|---|
用法 |
根据给定的格式将对象转换为字符串 |
将字符串解析为给定相应格式的 datetime 对象 |
方法类型 |
实例方法 |
类方法 |
方法 |
date; datetime;time |
datetime |
签名 |
strftime(format) |
strptime(date_string,format) |
from datetime import datetime
# 获取当前 datetime
now = datetime.now()
# 格式化 datetime
formatted = now.strftime("%Y-%m-%d %H:%M:%S")
print("Formatted datetime:", formatted) # 输出: 2024-04-17 08:38:16.670725+00:00
# 从字符串解析 datetime
parsed = datetime.strptime("2024-04-15 14:30", "%Y-%m-%d %H:%M")
print("Parsed datetime:", parsed) # 输出: 2024-04-17 16:38:16.670725+08:00
日期格式化标识符
%Y:四位数年份(例如:2024)
%m:带前导零的月份(01 至 12)
%d:带前导零的日期(01 至 31)
%A:完整星期名称(如 Monday)
%B:完整月份名称(如 January)
时间格式化标识符
%H:24小时制的小时数(00 至 23)
%I:12小时制的小时数(01 至 12)
%M:分钟数(00 至 59)
%S:秒数(00 至 59)
%p:AM 或 PM
其他标识符
%a:简写星期名称(如 Mon)
%b 或 %h:简写月份名称(如 Jan)
%c:完整的日期时间表示
%x:按本地设置的日期
%X:按本地设置的时间
参考文档
https://docs.python.org/zh-cn/3.12/library/datetime.html#/module-datetime