python 3.12, utcnow()弃用问题

1. 问题所在

Python 维护者发现的问题来自于这些函数返回的 "幼稚 "日期时间对象。

所谓 "幼稚 "日期时间对象是指没有时区的对象,这意味着它只能在时区无关紧要或已经预先知道的情况下使用

这与 "感知 "日期时间对象形成了鲜明对比,后者确实明确地附加了时区。

2. 代码示例

from datetime import datetime, timezone


def aware_utcnow():
    return datetime.now(timezone.utc)


def aware_utcfromtimestamp(timestamp):
    return datetime.fromtimestamp(timestamp, timezone.utc)


def naive_utcnow():
    return aware_utcnow().replace(tzinfo=None)


def naive_utcfromtimestamp(timestamp):
    return aware_utcfromtimestamp(timestamp).replace(tzinfo=None)


print(aware_utcnow())
print(aware_utcfromtimestamp(0))
print(naive_utcnow())
print(naive_utcfromtimestamp(0))


# 2024-01-10 08:47:40.528148+00:00
# 1970-01-01 00:00:00+00:00
# 2024-01-10 08:47:40.528148
# 1970-01-01 00:00:00

3. python3.12   utcnow()  结果会出来,但会出现错误

from datetime import datetime, timedelta, timezone
eta = datetime.utcnow()
local_eta = datetime.now()
print(eta)   # 2024-01-10 08:49:46.441464
print(local_eta)  # 2024-01-10 16:49:46.441464

会打印正确的时间,但会报一个错误如下,怎么把这个错误去掉

 DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC).
  eta = datetime.utcnow()

解决

from datetime import datetime, timedelta, timezone
eta = datetime.now(timezone.utc)
local_eta = datetime.now()
print(eta)  # 2024-01-10 08:52:13.080183+00:00
print(local_eta)  # 2024-01-10 16:52:13.080183

就不会出现问题,但是这个返回的时间带有+00:00,怎么去掉

from datetime import datetime, timedelta, timezone
eta = datetime.now(timezone.utc).replace(tzinfo=None)
local_eta = datetime.now()
print(eta)  # 2024-01-10 08:54:01.291963
print(local_eta)  # 2024-01-10 16:54:01.291963

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值