问题描述
我正在尝试使用 Python 将数据输入到 Hubspot API。
我有 %m%d%Y 格式的日期。我需要以毫秒为单位将其转换为 UNIX 时间。我相信,我已经使用下面的代码设置了该部分。
t = '09/02/2020'
t = datetime.strptime(t,"%m/%d/%Y").strftime("%Y-%m-%dT%H:%M:%s.%f")
ts = time.mktime(datetime.strptime(t,"%Y-%m-%dT%H:%M:%s.%f").timetuple())
ts * 10000
ts = int(ts)
这个例子的最终结果是
t= 2020-09-02T00:00:00.000000
ts = 1599019200
如果我将 ts 的结果放入 https://www.unixtimestamp.com/index.php 中,它似乎会转换为 09/02/2020 @ 4:00am (UTC)
但是,Hubspot 说“日期属性只会存储日期,并且必须将您想要的日期设置为 UTC 午夜。”
我迷路的地方是,我不知道如何进行设置,以便结果始终设置为 UTC 午夜,而且我找不到任何可以帮助我做到这一点的示例。
谁能帮忙解释一下如何做到这一点?
解决方法
有 datetime.timestamp()
方法以 unixtime 格式返回日期,但如果您查看此方法的文档,您会看到:
注意:没有方法可以直接从表示 UTC 时间的朴素 datetime
实例获取 POSIX 时间戳。如果您的应用程序使用此约定并且您的系统时区未设置为 UTC,您可以通过提供 tzinfo=timezone.utc
来获取 POSIX 时间戳:
timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
或者直接计算时间戳:
timestamp = (dt - datetime(1970,1,1)) / timedelta(seconds=1)
因此,以下文档解决方案是:
from datetime import datetime,timezone,timedelta
t = "09/02/2020"
ts = datetime.strptime(t,"%m/%d/%Y").replace(tzinfo=timezone.utc).timestamp()
# OR
ts = (datetime.strptime(t,"%m/%d/%Y") - datetime(1970,1)).total_seconds()