将DD/MM/YYYY HH:MM:SS 转换为MySQL TIMESTAMP

3 投票
2 回答
2864 浏览
提问于 2025-04-16 03:58

我想要一个简单的方法,把格式为 'DD/MM/YYYY' 的日期转换成 'YYYY/MM/DD',这样才能和 MySQL 的时间戳兼容。这些日期可能在一堆文本中出现,也可能根本没有日期,我是在用 Python。(我在想用正则表达式?)

简单来说,我想找个办法检查一系列的文本,修正里面找到的任何时间戳格式。

标准的好处就是有很多种可以选择……

2 个回答

1

如果你在使用 MySQLdb(也叫“mysql-python”)这个模块,对于任何日期时间或时间戳字段,你可以直接用 datetime 类型来代替字符串。这种类型是返回的结果,也是推荐的值提供方式。

对于 Python 2.5 及以上版本,你可以这样做:

from datetime import datetime

value = datetime.strptime(somestring, "%d/%m/%Y")

对于旧版本的 Python,写法会稍微复杂一些,但其实问题不大。

import time
from datetime import datetime

timetuple = time.strptime(somestring, "%d/%m/%Y")
value = datetime(*timetuple[:6])

各种格式字符串直接来自你的 C 库所接受的格式。你可以在 Unix 系统上查找 man strptime 来找到其他可接受的格式值。并不是所有的时间格式都是通用的,但大多数基本格式都是可以的。

注意 datetime 值可以包含时区。不过我认为 MySQL 对这些时区的处理并不是很清楚。我上面创建的 datetime 通常被认为是“天真的” datetime。如果时区很重要,可以考虑使用 pytz 这个库。

1

你可以把字符串读入一个 datetime 对象,然后再用不同的格式把它输出成字符串。比如说:

>>> from datetime import datetime
>>> datetime.strptime("31/12/2009", "%d/%m/%Y").strftime("%Y/%m/%d")
'2009/12/31'

基本上,我想找个办法来检查一堆项目,并修正里面的时间戳格式。

如果输入格式不一致,变化很多,那你最好使用 dateutil

>>> from dateutil.parser import parse
>>> parse("31/12/2009").strftime("%Y/%m/%d")
'2009/12/31'

Dateutil 可以自动处理很多输入格式。要对一个列表进行操作,你可以用 map 函数把 parse 函数包裹起来,然后对列表里的值进行适当的转换。

撰写回答