Python3时间戳到unix时间(有时毫秒)

问题描述 投票:1回答:2

我正在尝试将时间戳转换为unix时间。

时间戳看起来像这样: 2018-01-16T20:26:16.35

所以现在我使用这段代码:

timestamp = '2018-01-16T20:26:16.35'
ts = timestamp.replace("T", " ")
tsUnix = time.mktime(datetime.datetime.strptime(ts, "%Y-%m-%d %H:%M:%S.%f").timetuple())

有时获取时间戳的api给我的时间没有毫秒。 这将导致错误“与格式不匹配”​​。 (Duh,%f不在那里)

我是否需要编写解决方法脚本或是否有此功能?是否有更好的方法从原始时间码中删除“T”?

python python-3.x timestamp unix-timestamp
2个回答
2
投票

以下是使用tryexcept处理问题的一种方法:

import time
import datetime

def get_ts_unix(ts):
    try:
        tsUnix = time.mktime(
            datetime.datetime.strptime(ts, "%Y-%m-%dT%H:%M:%S.%f").timetuple()
        )
    except ValueError:
        tsUnix = time.mktime(
            datetime.datetime.strptime(ts, "%Y-%m-%dT%H:%M:%S").timetuple()
        )
    return tsUnix

例:

timestamps = ['2018-01-16T20:26:16.35', '2018-01-16T20:26:16']
for ts in timestamps:
    print("%-24s: %f" % (ts, get_ts_unix(ts)))

输出:

2018-01-16T20:26:16.35  : 1516152376.000000
2018-01-16T20:26:16     : 1516152376.000000

0
投票

要跳过ts = timestamp.replace("T", " "),请在格式字符串中添加T.

timestamp = '2018-01-16T20:26:16.35'
time.mktime(datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f").timetuple())
# returns 1516130776.0

要修复毫秒,可以使用python-dateutil包

from dateutil import parser

raw_timestamp = '2018-01-16T20:26:16.35'
parsed_time = parser.parse(raw_timestamp)
timestamp = parsed_time.timestamp()
© www.soinside.com 2019 - 2024. All rights reserved.