2010-02-15 4 views
72

J'ai une chaîne de date avec le format 'Mon Feb 15 2010'. Je veux changer le format en '15/02/2010 '. Comment puis-je faire ceci? ModuleParse chaîne de date et le format de modification

+0

Dupliquer de tous ces éléments: http://stackoverflow.com/search?q=%5Bpython%5D+parse+date.Exact duplicate of thise: http://stackoverflow.com/questions/1713594/parsing-dates-and-times-from-strings-using-python –

+0

duplication possible de [Comment convertir une chaîne de date à un format différent en python] (http://stackoverflow.com/questions/14524322/how-to-convert-a-date-string-to-different-format-in-python) – Pureferret

Répondre

91

datetime pourrait vous aider avec ça:

datetime.datetime.strptime(date_string, format1).strftime(format2) 
+1

datetime.datetime (lun 15 fév 2010, "% a% b% d% Y ") strftime ("% d /% m /% Y ") Est-ce correct? mais j'ai une erreur. – Nimmy

+1

@nimmyliji: Vous avez vu la partie "chaîne", non? –

+1

@nimmyliji: il a été réparé 10 minutes avant de poster votre commentaire. et bien sûr vous devriez avoir 'date_string' comme une chaîne. – SilentGhost

20
>>> from_date="Mon Feb 15 2010" 
>>> import time     
>>> conv=time.strptime(from_date,"%a %b %d %Y") 
>>> time.strftime("%d/%m/%Y",conv) 
'15/02/2010' 
37

Vous pouvez installer la bibliothèque dateutil. Sa fonction parse permet de déterminer le format d'une chaîne sans avoir à spécifier le format comme avec datetime.strptime.

from dateutil.parser import parse 
dt = parse('Mon Feb 15 2010') 
print(dt) 
# datetime.datetime(2010, 2, 15, 0, 0) 
print(dt.strftime('%d/%m/%Y')) 
# 15/02/2010 
+0

dateutil.parse est une meilleure alternative si le format exact d'une chaîne ISO légale est inconnu. ISO peut contenir ou non des microsecondes. Il peut ou non contenir "Z" arrière. datetime.strptime n'est pas assez flexible pour s'adapter à cela. –

+3

Pase Date doit être utilisé avec précaution. analyser ('12 .07.2017 ') renvoie datetime (2017, 12, 7, ..) mais analyser ('13 .07.2017') renvoie .datetime (2017, 7, 13, ...) – ego2dot0

12

chaîne de conversion pour objet datetime

from datetime import datetime 
s = "2016-03-26T09:25:55.000Z" 
f = "%Y-%m-%dT%H:%M:%S.%fZ" 
datetime = datetime.strptime(s, f) 
print(datetime) 
output: 
2016-03-26 09:25:55 
1

Juste pour être complet: lors de l'analyse d'une date à l'aide strptime() et la date contient le nom d'un jour, mois, etc, il faut savoir que vous devez comptabiliser les paramètres régionaux.

Il est également mentionné dans le docs.

À titre d'exemple:

import locale 
print(locale.getlocale()) 

>> ('nl_BE', 'ISO8859-1') 

from datetime import datetime 
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d') 

>> ValueError: time data '6-Mar-2016' does not match format '%d-%b-%Y' 

locale.setlocale(locale.LC_ALL, 'en_US') 
datetime.strptime('6-Mar-2016', '%d-%b-%Y').strftime('%Y-%m-%d') 

>> '2016-03-06' 
3

Cette question vient souvent, voici l'explication simple.

datetime ou time Le module a deux fonctions importantes.

  • strftime - crée une représentation de chaîne de date ou l'heure d'un objet datetime ou le temps.
  • strptime - crée un objet datetime ou time à partir d'une chaîne.

Dans les deux cas, nous avons besoin d'une chaîne de formatage. C'est la représentation qui indique comment la date ou l'heure est formatée dans votre chaîne.

Supposons maintenant que nous ayons un objet date.

>>> from datetime import datetime 
>>> d = datetime(2010, 2, 15) 
>>> d 
datetime.datetime(2010, 2, 15, 0, 0) 

Si nous voulons créer une chaîne à partir de cette date dans le format 'Mon Feb 15 2010'

>>> s = d.strftime('%a %b %d %y') 
>>> print s 
Mon Feb 15 10 

Lets supposons que nous voulons convertir cette s à nouveau à un objet datetime.

>>> new_date = datetime.strptime(s, '%a %b %d %y') 
>>> print new_date 
2010-02-15 00:00:00 

Référez-vous à This pour documenter toutes les directives de mise en forme concernant datetime.