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

时间:2010-09-10 18:21:43

标签: python mysql regex datetime timestamp

我想找一个简单的方法来查找格式'DD / MM / YYYY'并将其重新格式化为'YYYY / MM / DD'以与MySQL TIMESTAMPs兼容,在一个文本项目列表中可能会也可能不会在python下包含一个日期atall。 (我在想RegEx?)

基本上我正在寻找一种方法来检查项目列表并更正找到的任何时间戳格式。

关于标准的好处是有很多可供选择....

2 个答案:

答案 0 :(得分: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以查找其他可接受的格式值。并非所有时间格式都是可移植的,但大多数基本格式都是。

注意日期时间值可以包含时区。我不相信MySQL确切知道如何处理这些问题。我上面提到的日期时间通常被认为是“天真”的日期时间。如果时区很重要,请考虑类似pytz库。

答案 1 :(得分: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函数的包装器并适当地转换值。