La conversion de chaîne en datetime
J'ai une liste énorme de la date des moments comme cela que des chaînes:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
Je vais être en train de bousculer le retour dans les champs datetime dans une base de données donc j'ai besoin de la magie de véritables objets datetime.
C'est en passant par l'ORM de Django donc je ne peux pas utiliser SQL pour faire la conversion lors de l'insertion.
- Sauf si vous êtes sûr un format de poignées de chaque date-heure (pas de ", pas de NaNs, aucune incomplètes, pas de format décalages, pas de caractères de fin, fuseaux horaires, de la microseconde d'horodateurs, ou d'autres textes...), à l'exception-le bonheur de
strptime()
vous conduira fou, à moins que vous l'envelopper. Voir ma réponse, basée sur Ou Weis réponse à cette - Le plus paresseux, le plus largement utilisable approche je sais, c'est dateparser (consultez blog.scrapinghub.com/2015/11/09/...). Il fonctionne même avec le langage naturel des expressions temporelles dans plusieurs langues. Je pense que ça peut être lent si.
Vous devez vous connecter pour publier un commentaire.
datetime.strptime
est la routine principale pour l'analyse de chaînes en datetimes. Il peut traiter toutes sortes de formats, dont le format déterminé par une chaîne de format vous la donner:L'résultant
datetime
objet est de fuseau horaire naïfs.Liens:
La documentation Python pour
strptime
: Python 2, Python 3La documentation Python pour
strptime
/strftime
chaînes de format: Python 2, Python 3strftime.org est aussi une belle référence pour strftime
Notes:
strptime
= "string" au moment de l'analyse"strftime
= "chaîne de format de l'heure"date
au lieu d'undatetime
, en passant pardatetime
poignées de bien:datetime.strptime('Jun 1 2005', '%b %d %Y').date() == date(2005, 6, 1)
datetime
objet en ajoutant cette ligne dans Python 3:from datetime import timezone; datetime_object = datetime_object.replace(tzinfo=timezone.utc)
datetime
en python avant le 3?"%Y-%m-%d %H:%M:%S"
AttributeError: 'module' object has no attribute 'strptime'
from datetime import datetime
au lieu de simplementimport datetime
.strptime
etstrftime
, qui obligent les utilisateurs à aller à docs plutôt que de trouver une solution de manière interactive dans les listes d'un objet les fonctions de soutien.strptime
etstrftime
. J'ai toujours eu à chercher mon utilisation, la présente note rend facile à retenir.Usage de la troisième partie dateutil bibliothèque:
Il peut gérer la plupart des formats de date, y compris celui que vous devez analyser. C'est plus pratique que
strptime
comme on peut le deviner le format correct la plupart du temps.Il est très utile pour écrire des tests, où la lisibilité est plus important que la performance.
Vous pouvez l'installer avec:
dayfirst
mot-cléDécouvrez strptime dans le le temps module. C'est l'inverse de strftime.
J'ai mis en place un projet qui peut convertir certains de vraiment génial expressions. Découvrez timestring.
Voici quelques exemples ci-dessous:
pip install timestring
import timestring
timestring.Date('27 Mar 2014 12:32:29 GMT').year
Cette lib fait-il SI FACILE! Je vous remercie..date()
n'est pas disponible.timestring.Range('this week').start
ettimestring.Range('this week').end
Python\Python27\site-packages\timestring\Date.py.__init__:20 2458 1.42 0.41 (ncall ttot tsub)
Il prend plus de 1,4 sec pour effectuer 2400timestring.Date('19:36:23 06/05/2015').to_unixtime()
appelstimestring
ne permet pas encore de traiter correctement subsecond fois:timestring.Date('Aug 28 1999 12:53:45.123 AM').date
donne datetime.datetime(1999, 8, 28, 0, 53, 45, 0) maisdateutil.parser.parse('Aug 28 1999 12:53:45.123 AM')
correctement donne datetime.datetime(1999, 8, 28, 0, 53, 45, 123)2017-02-01
. Même pour 5/Fév/2017 (il ne Fév/5/2017 correctement, cependant); aucun de ces deux dernières sont les formats que j'ai jamais vu utilisé, à ma connaissance, mais je pensais le point de toute façon.Date("20180912")
en quelque sorte analyse d'une valeur de2018-11-21
. Utilisez à vos propres risques.Souvenir de cela et vous n'avez pas besoin de s'embrouiller dans datetime conversion.
Chaîne pour objet datetime =
strptime
objet datetime vers d'autres formats =
strftime
Jun 1 2005 1:33PM
est égal à
%b %d %Y %I:%M%p
si vous avez besoin strptime i-e de la conversion
string
àSortie
Que faire si vous avez autre format des dates, vous pouvez utiliser panda ou dateutil.analyser
Sortie
%b
pause si vous analyser un anglais date sur une machine qui n'a pas de paramètres régionaux anglais?De nombreux horodateurs ont implicite de fuseau horaire. Pour vous assurer que votre code fonctionne dans chaque fuseau horaire, vous devez utiliser l'UTC à l'interne et à joindre un fuseau horaire à chaque fois qu'un objet étranger entre dans le système.
Python 3.2+:
mktime()
au cours de l'heure d'été transitions) 1ère méthode si vous connaissez la 2e méthode (datetime.strptime()
)? Si vous voulez éviter une exception lors d'un saut de seconde (la 2e méthode échoue) alors vous pouvez utilisercalendar.timegm
à la place:(datetime(1970,1,1)+timedelta(seconds=timegm(time.strptime(..)))).replace(tzinfo=timezone(timedelta(-3)))
En Python >= 3.7.0,
pour convertir AAAA-MM-JJ chaîne pour objet datetime,
datetime.fromisoformat
pourrait être utilisé.Voici deux solutions à l'aide de Pandas pour convertir des dates au format des chaînes de caractères en datetime.les objets date.
Timings
Et voici comment convertir le po d'origine date d'exemples:
Il existe de nombreuses options pour la conversion de chaînes de Pandas Horodateurs à l'aide de
to_datetime
, afin de vérifier la docs si vous besoin de quelque chose de spécial.De même, les Horodateurs ont beaucoup de propriétés et méthodes qui peut être consulté en plus de
.date
Quelque chose qui n'est pas mentionnée ici, et elle est utile: l'ajout d'un suffixe à la journée. Je découplé du suffixe de la logique de sorte que vous pouvez l'utiliser pour n'importe quel nombre vous aime, et pas simplement les dates.
Personnellement, j'aime la solution à l'aide de la
parser
module, qui est la deuxième Réponse à cette question est très belle, comme vous n'avez pas à construire des littéraux de chaîne pour le faire fonctionner. MAIS, seul inconvénient, c'est qu'il est 90% plus lent que l'on a accepté de répondre àstrptime
.Aussi longtemps que vous ne le faites pas un million de fois plus et plus encore une fois, je pense toujours que la
parser
méthode est la plus pratique et la volonté de traiter la plupart des formats de l'heure automatiquement.Django Fuseau horaire conscient objet datetime exemple.
Cette conversion est très important pour Django et Python lorsque vous avez
USE_TZ = True
:Créer une petite fonction d'utilité comme:
C'est assez polyvalent:
format
est un mot réservé en python et ne devrait pas être utilisé comme un nom de variable.flèche offre de nombreuses fonctions utiles pour les dates et les heures. Ce morceau de code fournit une réponse à la question et montre que la flèche est également capable de formatage des dates facilement et afficher de l'information pour d'autres localités.
Voir http://arrow.readthedocs.io/en/latest/ pour plus d'.
Elle serait utile pour la conversion de chaîne de caractères de type datetime et aussi avec le temps, la zone
Vous pouvez utiliser easy_date pour le rendre facile:
Si vous souhaitez qu'un format de date, alors vous pouvez convertir manuellement en passant vos champs comme:
Vous pouvez passer votre split valeurs de chaîne à convertir en date de ce type:
Vous obtiendrez la valeur obtenue dans le format de date.
il montre "Date de Début de l'Heure" Colonne "Dernière Connexion", les deux sont "objet = strings" dans le data-frame
En utilisant
parse_dates
option dansread_csv
mentionner que vous pouvez convertir une chaîne de caractères de type datetime dans les pandas format datetime.Voir ma réponse.
En données du monde réel, c'est un vrai problème: multiples, dépareillés, incomplètes, incohérentes et multilanguage région/les formats de date, souvent mélangé librement dans un dataset. Ce n'est pas ok pour le code de production à l'échec, encore moins aller exception-heureux comme un renard.
Nous avons besoin de try...catch de multiples formats dateheure fmt1,fmt2,...,fmtn et supprimer/gérer les exceptions (à partir de
strptime()
) pour tous ceux qui incompatibilité (et, en particulier, d'éviter d'avoir besoin d'un yukky n-profondeur indentée échelle de try..catch clauses). De ma solution