2014-04-21 217 views
1

我有一个字符串场女巫是一个日期从互联网上刮下,并读取这样的:转换Python字符串日期MySQL的日期时间

"Lun Ene 27, 2014 9:52 am", "Mar Feb 11, 2014 5:38 pm",... 

LUN =星期(lunes /星期一) 烯=月(enero /一月)

我需要在日期时间字段中的mysql表中输入它们。

'YYYY-MM-DD HH:MM:SS' 

我想这是一个非常普遍的问题,并想知道如果有人已经有一个脚本来做到这一点还是可以指出在那里我可以找...

提前感谢!

+0

看['datetime'](https://docs.python.org/ 2.7/library/datetime.html)来处理Python中的日期/时间数据。 – Ffisegydd

+0

什么日期格式是第一个字符串?第二个似乎有两个月,第一个似乎包含非英语单词。 – fr1tz

+0

特别看看['strptime'和'strftime'](https://docs.python.org/2.7/library/datetime.html#strftime-and-strptime-behavior) – Ffisegydd

回答

1
month_of_the_year = ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dec'] 

def convert_to_mysql_format(string): 
    explode = string.split() 
    day_of_the_month = explode[2][:-1] 
    if int(explode[2][:-1]) < 10: 
    day_of_the_month = "%02d" % (int(explode[2][:-1]),) 

    if explode[5] == 'am': 
    time_split = explode[4].split(':') 
    if time_split[0] == '12': 
     time_split[0] = '00' 
    elif int(time_split[0]) < 10: 
     time_split[0] = "%02d" % int(time_split[0]) 

    else: 
    time_split = explode[4].split(':') 
    if int(time_split[0]) in range(1, 12): 
     time_split[0] = str(int(time_split[0]) + 12) 


    if month_of_the_year.index(explode[1]) < 12: 
    explode[1] = "%02d" % (month_of_the_year.index(explode[1])+1) 

    return explode[3]+'-'+explode[1]+'-'+day_of_the_month+' '+time_split[0]+':'+time_split[1]+':00' 

print convert_to_mysql_format("Lun Ene 27, 2014 9:52 am") 
print convert_to_mysql_format("Lun Ene 27, 2014 9:52 pm") 

2014年1月27日九时52分00秒
2014年1月27日21时52分零零秒

+0

谢谢mahmoh!我调整了拉斯维加斯如果<12,并且工作完美!只是为了我的信息,什么是“%02d”%的声明? – user2950162

+0

@ user2950162首先感谢您纠正最后一条if语句,没有足够的调试:-)。其次“%02d”(d)=整数,(02)=如果数字表示为1位,则添加前导零。考虑到像-2这样的负数单数位数字不会显示为-02,因此必须使用-02的结果来表示“%03”。 – mahmoh

0

默认情况下,运行的Python用C语言环境:

>>> from datetime import datetime 
>>> datetime.strptime("Tue Feb 11, 2014 5:38 PM", "%a %b %d, %Y %I:%M %p") 
datetime.datetime(2014, 2, 11, 17, 38) 
>>> import locale 
>>> locale.nl_langinfo(locale.T_FMT_AMPM) 
'%I:%M:%S %p' 

更改地区部分地帮助我的系统上:

>>> locale.setlocale(locale.LC_TIME, 'es_ES.UTF-8') 
'es_ES.UTF-8' 
>>> datetime.strptime("Lun Ene 27, 2014 9:52 am"[:-2], "%a %b %d, %Y %I:%M %p") 
datetime.datetime(2014, 1, 27, 9, 52) 
>>> locale.nl_langinfo(locale.T_FMT_AMPM) 
'' 

T_FMT_AMPM未设置为我的es_ES.UTF-8系统上的一些原因。要修复它,如果时间字符串以'pm'结尾,您可以手动添加12小时。

strftime()time的行为是一样的。

注意:其他系统上的语言环境名称可能不同。

相关问题