将特定时区中的日期转换为 Python 中的时间戳

Posted

技术标签:

【中文标题】将特定时区中的日期转换为 Python 中的时间戳【英文标题】:Convert date in a specific timezone to a timestamp in Python 【发布时间】:2021-06-29 14:19:14 【问题描述】:

如果我有“2021 年 4 月 2 日”之类的内容并且(假设它在太平洋标准时间中午上市),我将如何将其转换为等效的 Unix 纪元日期,我认为这是 UTC 时间的第二个数字?

这是我的尝试:

import time
import datetime
import pytz

print("Right now it's ".format(int(time.time())))

date_string = "Apr 02, 2021"

d = datetime.datetime.strptime(date_string, '%b %d, %Y').replace(hour=12)
pacific_timezone = pytz.timezone("America/Los_Angeles")
d_in_pacific_time = pacific_timezone.localize(d)

print("Noon PST on that day was ".format(int(d_in_pacific_time.timestamp())))

我不知道我这样做是否正确,或者该方法是否有意义,时间总是让我感到困惑,我在这里盲目飞行。制作日期时间,将其本地化为 pytz 时区,然后使用 .timestamp() 将其转换为 UTC 是否正确?

【问题讨论】:

是的,你是对的,如果你把它转换回来,它会给你正确的输出。 print(datetime.datetime.fromtimestamp(1617390000).astimezone(tz = pytz.timezone('US/Pacific'))) 【参考方案1】:
import datetime as dt
import pytz

pacific_timezone = pytz.timezone("America/Los_Angeles")
date = dt.datetime(2021, 4, 2, tzinfo=pacific_timezone)  # Apr 2, 2021
posix_time = date.timestamp()  # seconds since Jan 1, 1970

您可以通过测试date = dt.datetime(1970,1,1,tzinfo=dt.timezone.utc) 来验证这是否有效。

指定tzinfo 使date 成为“感知”日期时间对象,这就是为什么您可以将其与其他日期时间对象进行比较,就像在timestamp() 方法中所做的那样。来自文档:

timestamp = (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()

【讨论】:

以上是关于将特定时区中的日期转换为 Python 中的时间戳的主要内容,如果未能解决你的问题,请参考以下文章

将时间戳转换为特定时区然后在 bigquery 中将其转换为日期时出现问题

将UTC时间戳转换为熊猫中的本地时区问题

Python:如何将日期时间/时间戳从一个时区转换为另一个时区?

将 UTC 中的 SQL Server 日期时间转换为特定时区

在 VBA 中,如何以简单的方式将 UTC UNIX 时间戳转换为本地时区日期?

检索日期并根据用户时区将其转换为特定时区