未登录
头像

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

 

 

输出和字符构造:

 

 


strftime

strptime

  用法

根据给定的格式将对象转换为字符串

将字符串解析为给定相应格式的 datetime 对象

方法类型

实例方法

类方法

方法

datedatetimetime

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方法,返回全部的时区名称.


发表评论

登录 后才能评论。

暂无评论,快来抢沙发!