Μετατροπή συμβολοσειράς σε datetime

Έχω έναν τεράστιο κατάλογο με ημερομηνίες-ώρες όπως αυτή ως συμβολοσειρές:

Jun 1 2005  1:33PM
Aug 28 1999 12:00AM

I'm πρόκειται να σπρώξει αυτά πίσω σε σωστή datetime πεδία σε μια βάση δεδομένων, έτσι πρέπει να τα μαγικά σε πραγματικά datetime αντικείμενα.

Αυτό περνάει μέσα από το Django's ORM, οπότε δεν μπορώ να χρησιμοποιήσω SQL για να κάνω τη μετατροπή κατά την εισαγωγή.

Λύση

Η datetime.strptime είναι η κύρια ρουτίνα για την ανάλυση συμβολοσειρών σε χρονολογίες. Μπορεί να χειριστεί όλα τα είδη μορφών, με τη μορφή να καθορίζεται από μια συμβολοσειρά μορφής που της δίνετε:

from datetime import datetime

datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

Το προκύπτον αντικείμενο datetime είναι χρονοζωνικό.

Σύνδεσμοι:

  • Τεκμηρίωση Python για το strptime: [Python 2][1], Python 3

  • Τεκμηρίωση Python για τις συμβολοσειρές μορφής strptime/strftime: [Python 2][3], Python 3

  • Το strftime.org είναι επίσης μια πολύ ωραία αναφορά για το strftime

Σημειώσεις:

Σχόλια (14)

Χρησιμοποιήστε τη βιβλιοθήκη dateutil τρίτου μέρους:

from dateutil import parser
parser.parse("Aug 28 1999 12:00AM")  # datetime.datetime(1999, 8, 28, 0, 0)

Μπορεί να χειριστεί τις περισσότερες μορφές ημερομηνίας, συμπεριλαμβανομένης και αυτής που πρέπει να αναλύσετε. Είναι πιο βολική από την strptime καθώς μπορεί να μαντέψει τη σωστή μορφή τις περισσότερες φορές.

Είναι πολύ χρήσιμο για τη συγγραφή δοκιμών, όπου η αναγνωσιμότητα είναι πιο σημαντική από την απόδοση.

Μπορείτε να το εγκαταστήσετε με:

pip install python-dateutil
Σχόλια (8)

Ελέγξτε το strptime στην ενότητα time. Είναι το αντίστροφο του strftime.

$ python
>>> import time
>>> time.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
                 tm_hour=13, tm_min=33, tm_sec=0,
                 tm_wday=2, tm_yday=152, tm_isdst=-1)
Σχόλια (6)