我在Python中有一个不同日期格式的列表:
list1 = ["30-4-1994", "1994-30-04", "30/04/1994",
"30-apr-1994", "30/apr/1994","1994-30-apr"]
我想将多种日期格式格式化为单个日期,例如dd-mm-yyyy
我该怎么做?
答案 0 :(得分:1)
如果您的格式有限,可以试试这个:
from datetime import datetime
list1=["30-4-1994","1994-30-04","30/04/1994","30-apr-
1994","30/apr/1994","1994-30-apr"]
for i in list1:
for fmt in ('%Y-%m-%d', '%d-%m-%Y', '%d/%m/%Y',
'%Y-%d-%m', '%Y-%d-%b', '%d-%b-%Y', '%d/%b/%Y'):
try:
example_time = datetime.strptime(i, fmt).date()
final_output = datetime.strftime(example_time, "%d-%m-%Y")
print(final_output)
except ValueError:
continue
答案 1 :(得分:0)
您必须配置这些日期格式。
示例:
>>> from datetime import datetime
>>> example_time = datetime.strptime("2018-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
>>> example_time
datetime.datetime(2018, 1, 1, 0, 0)
>>> datetime.strftime(example_time, "%d-%m-%Y")
'01-01-2018'
答案 2 :(得分:0)
在理想的世界中,您知道输入的格式。
如果无法做到这一点,我建议您使用第三方库来处理混合格式的日期。
我想到的两个图书馆是dateutil
(通过dateutil.parser.parse
)和pandas
(通过pandas.to_datetime
)。以下是前者的示例实现。
请注意parser.parse
失败的唯一场合必须通过datetime.strptime
进行手动转换。 datetime
是标准Python库的一部分。
from datetime import datetime
from dateutil import parser
list1 = ["30-4-1994", "1994-30-04", "30/04/1994",
"30-apr-1994", "30/apr/1994","1994-30-apr"]
def converter(lst):
for i in lst:
try:
yield parser.parse(i)
except ValueError:
try:
yield parser.parse(i, dayfirst=True)
except ValueError:
try:
yield datetime.strptime(i, '%Y-%d-%b')
except:
yield i
res = list(converter(list1))
# [datetime.datetime(1994, 4, 30, 0, 0),
# datetime.datetime(1994, 4, 30, 0, 0),
# datetime.datetime(1994, 4, 30, 0, 0),
# datetime.datetime(1994, 4, 30, 0, 0),
# datetime.datetime(1994, 4, 30, 0, 0),
# datetime.datetime(1994, 4, 30, 0, 0)]
然后,您可以使用datetime.strptime
以任意方式格式化为字符串:
res_str = [i.strftime('%d-%m-%Y') for i in res]
# ['30-04-1994',
# '30-04-1994',
# '30-04-1994',
# '30-04-1994',
# '30-04-1994',
# '30-04-1994']
答案 3 :(得分:0)
尝试以下代码:
list1=["30-4-1994","1994-30-04","30/04/1994","30-apr-1994","30/apr/1994","1994-30-apr"]
mt=['jan','feb','mar','apr','may','jun','jul','aug','sep','sept','oct','nov','dec' ]
dict={'jan':'01','feb':'02','mar':'03','apr':'04','may':'05','jun':'06','jul':'07','aug':'08','sep':'09','sept':'09','oct':'10','nov':'11','dec':'12'}
for i in range(0,len(list1)):
a=list1[i]
b= a.split('-')
d= a.split('/')
if len(b)==3:
c=b
if len(d)==3:
c=d
#-----for year
if int(c[0]) in range(1000,3000):
yyyy = c[0]
del(c[0])
elif int(c[2]) in range(1000,3000):
yyyy = c[2]
del(c[2])
#--------
#-----for date
if len(c[0])<2:
c[0] =int(c[0])
dd='%02d' %c[0]
else :
dd=c[0]
#-----for month
if len(c[1])<2:
c[1] =int(c[1])
mm='%02d' %c[1]
elif len(c[1])>2:
if isinstance(c[1], str)== True and c[1] in mt:
k= c[1]
mm=dict[k]
else :
mm=c[1]
print(dd,'-',mm,'-',yyyy)