在Python中将日期转换为时间戳

Lui*_*ruz -1 python timestamp date

我有一个数据库,其中包含日期格式为:“ 2015-10-20 22:24:46”。我需要将这些日期转换为UNIX时间戳(UTC),最简单的方法是使用Python?

MK *_*ung 7

from datetime import datetime
import time

dt = datetime.strptime('2015-10-20 22:24:46', '%Y-%m-%d %H:%M:%S')
ts = time.mktime(dt.timetuple())
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可以回答问题,但提供有关此代码为何和/或如何回答问题的附加上下文可以提高其长期价值。 (2认同)

YTe*_*rle 6

不使用任何 3rd 方库:

最直接的方法是datetime从给定的date对象创建一个对象,然后从中获取时间戳。

from datetime import date, datetime
dt = datetime(
        year=d.year,
        month=d.month,
        day=d.day
     )
timestamp = int(dt.timestamp())
Run Code Online (Sandbox Code Playgroud)


Rom*_*ent 6

datetime.datetime.timestamp()已在 python 3.3 中添加。它返回一个浮点数(十进制表示毫秒),因此您必须自己将其转换为整数。

使用示例:

from datetime import datetime


def ymdhms_to_timestamp(value: str) -> int:
    dt = datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
    return int(dt.timestamp())


t = ymdhms_to_timestamp("2015-10-20 22:24:46")
# 1445372686
datetime.fromtimestamp(t)
# datetime.datetime(2015, 10, 20, 22, 24, 46)
Run Code Online (Sandbox Code Playgroud)

另请注意,由于格式化的日期字符串不包含时区信息,因此如果代码执行的系统的时区不是 UTC则生成的时间戳将不是 UTC。(更一般地说,如果存储的日期与您的系统不在同一时区,结果将不正确。)

但是,如果存储的格式化日期最初是 UTC,您可以在将“原始日期时间”转换为时间戳之前将其纠正为“时区感知日期时间”。

例子:

from datetime import datetime, timezone


def ymdhms_to_timestamp_utc(value: str) -> int:
    naive_dt = datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
    utc_dt = naive_dt.replace(tzinfo=timezone.utc)
    return int(utc_dt.timestamp())


t = ymdhms_to_timestamp_utc("2015-10-20 22:24:46")
# 1445379886
datetime.fromtimestamp(t)
# datetime.datetime(2015, 10, 21, 0, 24, 46)
Run Code Online (Sandbox Code Playgroud)


Nic*_*ite 5

import time
timestamp = time.mktime(time.strptime('2015-10-20 22:24:46', '%Y-%m-%d %H:%M:%S'))
Run Code Online (Sandbox Code Playgroud)

有关带有所有%符号的格式字符串的更多信息,请参见python的时间库