我想将字符串'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'
无论如何。
我能以非常低效的方式做到这一点,但我想知道如何以聪明的方式做到这一点。
答案 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;