Je souhaite changer la chaîne 'datetime.datetime(2018, 4, 15, 12, 59)' au format '2018-04-15T12:59'.

J'ai créé une fonction qui ressemble à:

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

Et il fonctionne.

Cependant, je veux également qu'il gère le cas où si chaque unité est inférieure à 10, je veux ajouter un '0'. À l'heure actuelle, il ajoute simplement un '0'.

Je peux le faire de manière très inefficace, mais je me demande comment je peux le faire de manière intelligente.

0
Dawn17 16 avril 2018 à 05:07

3 réponses

Meilleure réponse

Je ne comprends pas pourquoi vous utilisez la représentation sous forme de chaîne d'un objet datetime mais eval est votre ami:

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

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

1
Zulu 16 avril 2018 à 02:14

Je suppose que vous essayez d'éviter d'utiliser l'objet datetime, car cela semble évidemment déroutant autrement.

Je peux le faire de manière très inefficace

Vous n'êtes en fait pas très loin, juste une ligne.

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

Je crains qu'il n'y ait pas de moyen plus intelligent si vous n'utilisez pas l'objet datetime.

1
thithien 16 avril 2018 à 02:19

Datetime.strftime et eval seraient parfaits ici.

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')

sortie: '2018-04-15T12: 59'

Référence: strftime () et strptime () Comportement

1
CoreCreatives 16 avril 2018 à 02:22