【问题标题】:How to convert a string with timezone to unix timestamp python? [duplicate]如何将带有时区的字符串转换为 unix 时间戳 python? [复制]
【发布时间】:2020-12-22 14:24:06
【问题描述】:

我有一个从数据库中获取的日期时间字符串,我想将其转换为 unix 时间戳。

我不知道该怎么做。

db_timestamp = '2020-08-05 12:48:50+02:00'
f = '%Y-%m-%d %H:%M:%S%z'
timestamp = datetime.strptime(db_timestamp , f)
TypeError: strptime() argument 1 must be str, not datetime.datetime 

我尝试的另一种方法如下

python_timestamp = datetime.isoformat(db_timestamp)
test_timestamp = datetime.strptime(python_timestamp , f)

然后我得到以下错误

ValueError: time data '2020-08-05T12:48:50+02:00' does not match format '%Y-%m-%d %H:%M:%S%z'

如何解决这个错误? db_timestamp 的正确字符串格式应该是什么?

【问题讨论】:

  • 在您的示例中,db_timestamp 具有另一种格式的日期/时间字符串,如您在ValueError 中所示 - 它实际上是哪一个?两种格式都与ISO 8601 兼容,因此fromisoformat 可以使用(请参阅我的答案)。
  • 您应该得到与您显示的不同的错误(或以不同的顺序)。我得到了第一个代码示例的最后一个错误。
  • 您使用的是哪个 Python 3.x 版本? (什么是 x?)

标签: python python-3.x datetime unix-timestamp


【解决方案1】:

假设您运行 Python 3.7 或更高版本,您想要的是 fromisoformat 解析字符串和 timestamp() 获取自 UNIX 纪元 (POSIX) 以来的秒数。

from datetime import datetime
db_timestamp = '2020-08-05 12:48:50+02:00'
# to datetime object:
dt = datetime.fromisoformat(db_timestamp)
# to UNIX time:
ts = dt.timestamp()
print(repr(dt), ts)
>>> datetime.datetime(2020, 8, 5, 12, 48, 50, tzinfo=datetime.timezone(datetime.timedelta(seconds=7200))) 1596624530.0

【讨论】:

  • @jmf:很高兴我能帮上忙。还有一件事,请注意,如果您的输入字符串不包含 UTC 偏移量,Python 将假定它是 本地时间 (您的操作系统设置) - 生成的 UNIX 时间戳然后考虑本地时间的 UTC 偏移量.
猜你喜欢
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 2019-10-29
相关资源
最近更新 更多