python3 时间戳减少 2 小时

问题描述 投票:0回答:4

我对 python 有点陌生,但在使用时间戳、utc 和 unixtime 方面遇到了最困难的时候。

此示例延迟了 2 小时:

sec_in_day=86400
today = datetime.datetime.utcnow() 
print(today)

two_days_ago=today.timestamp()-(sec_in_day*2);
print("Two days ago (unix)",two_days_ago)

# Convert timestamp via 3rd party 
tool:http://www.onlineconversion.com/unix_time.htm

#generated unix-timestamp is 2 hours early according to 3rd party tool

2017-04-11 06:36:49.414133

两天前(unix)1491712609.414133

通过在线工具转换 1491712609.414133 给了我

2017 年 4 月 9 日星期日 04:36:49 GMT

预计将于 2017 年 4 月 9 日星期日 06:36:49 GMT

python-3.x datetime time
4个回答
1
投票

这解决了我的问题

sec_in_day=86400
today = datetime.datetime.utcnow() 

timestamp = today.replace(tzinfo=timezone.utc).timestamp()
print("Today",today)
print("Today-Re", today.replace(tzinfo=timezone.utc))
print("TS",timestamp)
print("TS#2",(timestamp-(sec_in_day*2)))

1
投票

我相信一切都会按设计进行。

首先你要做:

today = datetime.datetime.utcnow()

采用UTC,没有夏令时调整,没有本地时区调整。

然后你就可以:

today.timestamp()

根据docs,这是当地时间,因此它包括对夏令时以及当地时区的调整。

这解释了 2 小时的差异。

您可能想了解的是

today - datetime.timedelta(days=2)


0
投票

您也可以使用以下代码

sec_in_day=86400
today = datetime.datetime.utcnow() 
print(today)

two_days_ago=today.timestamp()-(sec_in_day*2);

print("Two days ago (unix): ",datetime.datetime.fromtimestamp(two_days_ago).strftime('%Y-%m-%d %H:%M:%S.%f'))

在此我使用了 fromtimestamp(two_days_ago).strftime('%Y-%m-%d %H:%M:%S.%f')) 函数,它将把纪元时间转换为可读的形式。


0
投票

我建议这个解决方案:

from zoneinfo import ZoneInfo
from datetime import datetime, timedelta

utc = datetime.now(ZoneInfo('UTC')) - timedelta(days=2)
print('Two days ago:', utc)
print('Two days ago (timestamp):', utc.timestamp())
print('Getting date from timestamp for verification:', datetime.fromtimestamp(utc.timestamp(), ZoneInfo('UTC')))

结果:

两天前:2024-09-20 18:17:41.788909+00:00

两天前(时间戳):1726856261.788909

从时间戳获取日期进行验证:2024-09-20 18:17:41.788909+00:00

© www.soinside.com 2019 - 2024. All rights reserved.