
datetime模块
.date()<naive> .time() .datetime() <可naive也可aware>
.today()<支持date和datetime> .now()<只有datetime,可选择加入时区tz>
贴时区标签采用tzinfo<记住只是打标签用tzinfo,而修改时区并改变数值则用tz>:
.datetime(...,tzinfo=...)
.replace(tzinfo=…)
<此举并不会改变数字记录本身,而是额外增加一个时区标签记录信息,表名当前时间的时区是#,从而化为aware对象>
转变时区<要求必须有时区,因为无时区则无法确定当前的时间,时区转换的本质是确定同一时刻>
.astimezone(tz=#)
<转换时区,比如当前为12:00:00+8:00 由东八区切换到 西四区则换算为 0:00:00-4:00>
.datetime.now(tz=…)
<如果tz=None,则为naive对象,否则显示tz时区的时间点和时区>
<比如当前时间为19:59:00+8:00,则若取tz为西四区,则显示未7:59:00-4:00>
>>>
dt = datetime.datetime.now()
print(f"dt = {dt}")
dt1 = datetime.datetime.now(tz=ZoneInfo('America/New_York'))
print(f"dt1 = {dt1}")
dt3 = datetime.datetime.now(tz=datetime.timezone.utc)
print(f"dt3 = {dt3}")
<<<
dt = 2025-07-13 19:57:16.914468
dt1 = 2025-07-13 07:57:16.914468-04:00
dt3 = 2025-07-13 11:57:16.914468+00:00
.fromtimestamp(ts, tz=#)<转换时间戳为人熟悉的时间>
<其中ts 是时间戳,但是这个的执行逻辑是先把时间戳按utc时区拆解,再转换成tz指定的时区,若不传则按本地时区拆解>
<此方法也可以将naive对象转换为aware对象>
>>>
dt1 = datetime.datetime(2023, 10, 1, 12, 0, 0)
tz8 = ZoneInfo("Asia/Shanghai")
dt2 = datetime.datetime(2023, 10, 1, 12, 0, 0, tzinfo=tz8)
ts1 = dt1.timestamp()
ts2 = dt2.timestamp()
print("Timestamp 1:", ts1)
print("Timestamp 2:", ts2)
# 按道理说,两个时间戳应该是相等的
dt3 = datetime.datetime.fromtimestamp(ts1)
dt4 = datetime.datetime.fromtimestamp(ts1, tz=tz8)
print("Datetime from timestamp 1:", dt3)
print("Datetime from timestamp 2:", dt4)
dt5 = datetime.datetime.fromtimestamp(ts2)
dt6 = datetime.datetime.fromtimestamp(ts2, tz=ZoneInfo('America/New_York'))
print("Datetime from timestamp 2:", dt5)
print("Datetime from timestamp 2 with NY timezone:", dt6)
<<<
Timestamp 1: 1696132800.0
Timestamp 2: 1696132800.0
Datetime from timestamp 1: 2023-10-01 12:00:00
Datetime from timestamp 2: 2023-10-01 12:00:00+08:00
Datetime from timestamp 2: 2023-10-01 12:00:00
Datetime from timestamp 2 with NY timezone: 2023-10-01 00:00:00-04:00
.timestamp()<返回时间戳,会把本地时间按照utc来计算,比如东八区12:00,会换算成4:00.>
个人简述:
1.aware对象:
会把时间点转换为 utc ,比如东八区12:00->4:00
再计算到该utc时间点经过了多少秒.
2.naive对象:
会假定对象表示的是本地时间,然后转换为utc时间来计算时间点,相当于指明tz=东八区
再计算该utc时间点经过了多少秒.
>>>
dt = datetime.datetime(2023, 10, 1, 12, 0, 0)
ts = dt.timestamp()
print("timestamp:", ts)
utc = datetime.datetime(2023, 10, 1, 12, 0, 0, tzinfo=datetime.timezone.utc)
ts2 = utc.timestamp()
print("timestamp utc:", ts2)
tz8 = datetime.timezone(datetime.timedelta(hours=8))
lt = datetime.datetime(2023, 10, 1, 12, 0, 0, tzinfo=tz8)
ts3 = lt.timestamp()
print("timestamp local:", ts3)
<<<
timestamp: 1696132800.0
timestamp utc: 1696161600.0
timestamp local: 1696132800.0
输出和字符构造:
|
|
strptime |
||
用法 |
根据给定的格式将对象转换为字符串 |
将字符串解析为给定相应格式的 datetime 对象 |
||
方法类型 |
实例方法 |
类方法 |
||
方法 |
||||
签名 |
strftime(format) |
strptime(date_string, format) |
>>>
dt = datetime.datetime.strptime('31/01/22 23:59:59.999999',
'%d/%m/%y %H:%M:%S.%f')
print("Formatted DateTime:", dt)
ds = dt.strftime('%a %d %b %Y, %I:%M%p')
print("Formatted String:", ds)
<<<
Formatted DateTime: 2022-01-31 23:59:59.999999
Formatted String: Mon 31 Jan 2022, 11:59PM
补充点tz子类的构造:
datetime.timezone.utc
zoneinfo.ZoneInfo(#)
zoneinfo中含有available_timezones方法,返回全部的时区名称.