【问题标题】:Convert date in a specific timezone to a timestamp in Python将特定时区中的日期转换为 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')))

标签: python date datetime timezone pytz


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    相关资源
    最近更新 更多