寻找一种更简单的方法在Python中解析时间戳

1 投票
3 回答
804 浏览
提问于 2025-04-18 07:19

我正在从一个API获取数据,这个API返回的时间戳格式是这样的:'Thu May 22 15:40:24 +0000 2014'。不过,我需要把它转换成YYYY-MM-DD的格式,以便存入我的数据库。我写了一个函数来完成这个转换,但效果不太好。我在想,有没有人用Python的标准库,比如datetime,来做过类似的事情呢?

time = 'Thu May 22 15:40:24 +0000 2014'

def simplify_date(timestamp):
    """ 
    Converts a timestamp of the format
    'Thu May 22 15:40:24 +0000 2014' into a
    date string YYYY-MM-DD, e.g., '2014-05-22'.

    """
    months = {'Jan':'01', 'Feb':'02', 'Mar':'03',
              'Apr':'04', 'May':'05', 'Jun':'06',
              'Jul':'07', 'Aug':'08', 'Sep':'09',
              'Oct':'10', 'Nov':'11', 'Dec':'12'
              }
    t = timestamp.split()
    date = '%s-%s-%s' %(t[-1], months[t[1]], t[2])
    return date

print(simplify_date(time))
2014-05-22

3 个回答

0

你在寻找time.strftime这个函数。想了解更多信息,可以查看Python关于strftime的文档。

1

你可以这样做

import datetime

time = 'Thu May 22 15:40:24 +0000 2014'

new_time = datetime.datetime.strptime(time, "%a %b %d %H:%M:%S +0000 %Y")

print new_time.strftime("%Y-%d-%m")

Python 文档

1

你可以使用 datetime.datetime.strptime 这个函数来获取一个 datetime 对象,然后通过 strftime 将它格式化成你想要的任何样式。

>>> ts = "Thu May 22 15:40:24 +0000 2014"
>>> dt = datetime.datetime.strptime(ts, "%a %b %d %H:%M:%S +0000 %Y")
>>> dt.strftime("%Y-%m-%d")
'2014-05-22'

不过,有一点需要注意的是,在 Python 2 中,strptime 对时区偏移的处理不是很好。只要时区是固定的(比如 +0000),你可以直接把它写进你的格式字符串里。如果你使用的是 Python 3,可以用 %z 来匹配时区偏移,但在 Python 2 中这样做是无效的。

另外,我在上面用 %b 来表示月份,这个是匹配月份名称的 简写 版本。如果 API 实际上返回的是完整的月份名称(很难判断,因为你用的那个月份在例子中是从来不缩写的),你就需要用 %B 了。

撰写回答