改变字符串格式(python)

时间:2018-04-16 02:07:01

标签: python string

我想将字符串'datetime.datetime(2018, 4, 15, 12, 59)'更改为格式'2018-04-15T12:59'

我创建了一个看起来像这样的函数:

def changeDateFormat(date):
    newDate = []
    for i in date.split('datetime')[2].split(','):
        newDate.append(re.sub('[() ]', '', i))
    newStr = newDate[0] + '-0' + newDate[1] + '-' + newDate[2] + 'T' + newDate[3] + ':' + newDate[4]
    return newStr

它有效。

但是,我还希望它能够处理如果每个单元小于10的情况,我想添加'0'。现在它只是添加'0'无论如何。

我能以非常低效的方式做到这一点,但我想知道如何以聪明的方式做到这一点。

3 个答案:

答案 0 :(得分:1)

我不明白为什么你使用日期时间对象的字符串表示,但eval是你的朋友:

>>> import datetime
>>> eval('datetime.datetime(2018, 4, 15, 12, 59)').isoformat()
'2018-04-15T12:59:00'

eval文档:https://docs.python.org/3/library/functions.html#eval

答案 1 :(得分:1)

我认为你是在试图避免使用datetime对象,因为它似乎显然令人困惑。

  

我能以非常低效的方式做到这一点

你实际上并不是很远,只有一条线。

def changeDateFormat(date):
    newDate = []
    for i in date.split('datetime')[2].split(','):
        newDate.append(re.sub('[() ]', '', i))

    pad = '-0' if newDate[1] < 10 else '-'
    newStr = newDate[0] + pad + newDate[1] + '-' + newDate[2] + 'T' + newDate[3] + ':' + newDate[4]
    return newStr

如果你不使用datetime对象,我恐怕没有更聪明的方法。

答案 2 :(得分:1)

datetime.strftime和eval在这里会很完美。

import datetime
# use eval to execute the string like a a command
dt = eval('datetime.datetime(2018, 4, 15, 12, 59)')

formatted_date = dt.strftime('%Y-%m-%dT%H:%M')
  

输出:&#39; 2018-04-15T12:59&#39;

参考:strftime() and strptime() Behavior