Πώς να μετατρέψετε τη συμβολοσειρά σε Datetime στην Python

Η μετατροπή από έναν τύπο δεδομένων σε έναν άλλο τύπο δεδομένων είναι ζωτικής σημασίας σε οποιαδήποτε γλώσσα προγραμματισμού. Σχεδόν όλες οι γλώσσες προγραμματισμού υποστηρίζουν μετατροπές τύπων για ενσωματωμένους τύπους δεδομένων.

Οι προσαρμοσμένοι τύποι δεδομένων, όπως η ημερομηνία ώρας, χρειάζονται επιπλέον ενότητες για μετατροπές. Χρειαζόμαστε ενότητες, ειδικά για μετατροπές ημερομηνίας, καθώς η επεξεργασία τους δεν ήταν ποτέ εύκολη για τους προγραμματιστές. Ευτυχώς, η python έχει ενσωματωμένες μονάδες για να λειτουργεί με την ημερομηνία ώρας.

Θα μάθουμε πώς να μετατρέπουμε μια συμβολοσειρά ημερομηνίας σε αντικείμενο ημερομηνίας στην Python χρησιμοποιώντας διαφορετικές λειτουργικές μονάδες. Πριν προχωρήσουμε σε αυτό, ας δούμε γιατί πρέπει να το μετατρέψουμε εξαρχής.

Γιατί πρέπει να μετατρέψουμε μια συμβολοσειρά ημερομηνίας σε αντικείμενο ημερομηνίας;

Όταν πρέπει να δουλέψουμε με ημερομηνίες, δεν είναι εύκολο να δουλέψουμε εάν είναι σε μορφή συμβολοσειράς. Η μετατροπή τους σε μορφή ημερομηνίας καθιστά πολύ εύκολη την εργασία μαζί τους. Οι ημερομηνίες στις χορδές είναι σαν τις κανονικές χορδές. Δεν θα έχει ειδικές μεθόδους για να εργαστεί με ημερομηνίες. Θα έχει γενικές μεθόδους συμβολοσειράς, τις οποίες δεν θα χρειαστούμε όταν εργαζόμαστε με ημερομηνίες.

Ας πούμε ότι πρέπει να συγκρίνουμε δύο ημερομηνίες. Εάν είναι σε μορφή συμβολοσειράς, μπορούμε να τα συγκρίνουμε σωστά. Αν είναι σε μορφή ημερομηνίας, μπορούμε να χρησιμοποιήσουμε τους τελεστές σύγκρισης όπως αριθμούς.

Αυτό είναι μόνο ένα σενάριο όπου η μετατροπή σε μορφή ημερομηνίας ώρας κάνει τα πράγματα εύκολα. Υπάρχουν πολλά σενάρια όπως η προσθήκη ημερομηνιών, η αφαίρεση, ο χειρισμός των ζωνών ώρας κ.λπ., όπου η μετατροπή συμβολοσειράς ημερομηνίας σε αντικείμενο ημερομηνίας ώρας κάνει τη ζωή μας πιο εύκολη από ποτέ.

  6 Διορθώσεις για τον τοπικό εκτυπωτή που δεν εμφανίζεται στην απομακρυσμένη επιφάνεια εργασίας

Με αυτό, ας δούμε διαφορετικούς τρόπους μετατροπής μιας συμβολοσειράς ημερομηνίας σε αντικείμενο ημερομηνίας. Θα χρησιμοποιήσουμε ενσωματωμένες ενότητες datetime και dateutil τρίτων κατασκευαστών για να μετατρέψουμε τη συμβολοσειρά datetime σε αντικείμενο datetime. Ας ξεκινήσουμε με την ενότητα ημερομηνίας

Χρήση ημερομηνίας ώρας

Η ημερομηνία ώρας είναι μια ενσωματωμένη λειτουργική μονάδα της Python που χρησιμοποιείται για εργασία με ημερομηνίες και ώρες. Υπάρχουν πολλά μαθήματα σε αυτήν την ενότητα που μας βοηθούν να εργαστούμε με τις ημερομηνίες και την ώρα. Θα χρησιμοποιήσουμε την τάξη datetime.datetime για τη μετατροπή.

Το datetime.datetime έχει πολλές μεθόδους. Μας ενδιαφέρει η μέθοδος strptime που θα μας βοηθήσει στη μετατροπή. Ας το ελέγξουμε.

datetime.strptime

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

Ας δούμε ένα παράδειγμα

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

Εάν εκτελέσετε τον παραπάνω κώδικα, θα δείτε την ακόλουθη έξοδο.

2022-12-19 21:37:56

Πήραμε μια συμβολοσειρά datetime και τη μετατρέψαμε σε αντικείμενο datetime χρησιμοποιώντας τη μέθοδο datetime.strptime. Βεβαιωθείτε ότι η μορφή που παρέχετε στη μέθοδο ταιριάζει ακριβώς με τη συμβολοσειρά ημερομηνίας. Εάν δεν ταιριάζουν, τότε ενδέχεται να εμφανιστεί σφάλμα ή λανθασμένη έξοδος.

Έχουμε χρησιμοποιήσει ορισμένους κωδικούς μορφοποίησης για τη μορφή ημερομηνίας. Μπορείτε να ανατρέξετε σε όλους τους κωδικούς μορφής στα έγγραφα.

Η μέθοδος datetime.strptime επιστρέφει πλήρη ημερομηνία ημερομηνίας. Εάν θέλετε να λάβετε ξεχωριστά την ημερομηνία και την ώρα, μπορούμε να χρησιμοποιήσουμε τις μεθόδους ημερομηνίας ώρας του αντικειμένου ημερομηνίας ώρας. Ας δούμε τον κωδικό.

from datetime import datetime

string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"

## getting date separately
print("Date:", datetime.strptime(string, formatting).date())

## getting time separately
print("Time:", datetime.strptime(string, formatting).time())

Εκτελέστε τον παραπάνω κώδικα και θα δείτε την ακόλουθη έξοδο.

Date: 2022-12-19
Time: 21:37:56

Οι μέθοδοι ημερομηνία και ώρα θα επιστρέψουν τα αντικείμενά τους αντίστοιχα. Θα έχουν και πάλι τις αντίστοιχες μεθόδους τους για ημερομηνίες και ώρες.

  12 καλύτερα πλαίσια και εργαλειοθήκες για τη δημιουργία εφαρμογών επιφάνειας εργασίας

Έχουμε παράσχει τις σωστές συμβολοσειρές και μορφές για τη μέθοδο datetime.strptime που είδαμε παραπάνω. Εάν δεν τα παρέχουμε σωστά, τότε θα λάβουμε σφάλματα. Ας δούμε πώς να χειριστούμε αυτά τα σφάλματα. Εκτελέστε τον παρακάτω κώδικα.

from datetime import datetime

string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))

Ο παραπάνω κώδικας θα προκαλέσει σφάλμα επειδή η μορφοποίηση δεν ταιριάζει με τη συμβολοσειρά ημερομηνίας. Για να χειριστούμε αυτού του είδους τα σφάλματα, μπορούμε να χρησιμοποιήσουμε το try-except της Pythons. Ας το προσθέσουμε.

from datetime import datetime

try:
    string = "19:12:2022 09:37:56 PM"
    formatting = "%d-%m-%Y %I:%M:%S %p"
    print(datetime.strptime(string, formatting))
except ValueError as error:
    print(error)

Τώρα, εκτελέστε ξανά τον κωδικό. Θα δείτε το ακόλουθο μήνυμα σφάλματος χωρίς να σπάσετε τον κώδικα.

time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'

Ομοίως, μπορούμε να προσθέσουμε τη μέθοδο try-εκτός από την επόμενη μέθοδο parser.parse επίσης. Μας βοηθά να αποφύγουμε να σπάσουμε τον κώδικα στη μέση. Αυτό δεν σχετίζεται ειδικά με αυτό το πλαίσιο εκμάθησης, αλλά θα σας υπενθυμίσει να το χρησιμοποιήσετε στον κώδικά σας.

Αυτό είναι όλο για την ενότητα ημερομηνίας. Ας περάσουμε στην επόμενη ενότητα dateutil.

Χρησιμοποιώντας το dateutil

Η ενότητα dateutil παρέχει επεκτάσεις στην ενότητα datetime. Κάνει την εργασία με ημερομηνίες και ώρες πολύ πιο εύκολη με πολλές μεθόδους με εύκολη χρήση. Ας εγκαταστήσουμε τη μονάδα με την ακόλουθη εντολή.

pip install python-dateutil

Η μέθοδος που μας ενδιαφέρει είναι η dateutil.parser.parse. Ας δούμε πώς να μετατρέψετε τη συμβολοσειρά datetime σε αντικείμενο datetime.

αναλυτής.αναλύω

Η μέθοδος parser.parse θα λάβει μια συμβολοσειρά datetime και θα τη μετατρέψει σε μια αντίστοιχη μορφή αντικειμένου datetime. Δεν χρειάζεται να παρέχουμε καμία μορφοποίηση για αυτήν τη μέθοδο. Θα μετατρέψει αυτόματα τη δεδομένη συμβολοσειρά ημερομηνίας σε αντικείμενο ημερομηνίας. Ας δούμε ένα παράδειγμα.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print(parser.parse(string))

Εάν εκτελέσετε τον παραπάνω κώδικα, θα δείτε την ακόλουθη έξοδο.

2022-12-19 21:37:56

Η συμβολοσειρά datetime πρέπει να είναι σε μια συγκεκριμένη μορφή που δέχεται η μέθοδος parser.parse. Θα εμφανίσει ένα σφάλμα εάν η μορφή συμβολοσειράς ημερομηνίας δεν είναι σύμφωνα με την επιθυμητή μορφή. Μπορείτε να ελέγξετε όλες τις μορφές συμβολοσειράς ημερομηνίας που δέχεται για αυτόματες μετατροπές.

  Η δοκιμή απώλειας πακέτων είναι εύκολη με αυτά τα 6 εργαλεία

Καθώς η μέθοδος parser.parse επιστρέφει αντικείμενο datetime, μπορούμε να έχουμε πρόσβαση στα αντικείμενα ημερομηνίας και ώρας ξεχωριστά, όπως είδαμε με τη λειτουργική μονάδα datetime. Ας δούμε τον κωδικό.

from dateutil import parser

string = "19-12-2022 09:37:56 PM"
print("Date:", parser.parse(string).date())
print("Time:", parser.parse(string).time())

Μπορείτε να δείτε την παρακάτω έξοδο εάν εκτελέσετε τον παραπάνω κώδικα.

Date: 2022-12-19
Time: 21:37:56

Όπως μπορείτε να δείτε το dateutil διευκολύνει την εργασία με τις ημερομηνίες και τις ώρες συγκριτικά. Μπορείτε να εξερευνήσετε τη μονάδα στα έγγραφα.

συμπέρασμα

Χρησιμοποιήσαμε μια ενσωματωμένη λειτουργική μονάδα και μια λειτουργική μονάδα τρίτου κατασκευαστή για να μετατρέψουμε τη συμβολοσειρά ημερομηνίας σε αντικείμενο DateTime. Υπάρχει μια άλλη ενσωματωμένη μονάδα που ονομάζεται χρόνος με την οποία μπορούμε να μετατρέψουμε τη συμβολοσειρά ημερομηνίας ώρας σε αντικείμενο DateTime παρόμοιο με τις ενότητες datetime και dateutil. Δοκιμάστε το μόνοι σας. Δεν θα είναι δύσκολο καθώς έχετε ήδη κάνει κάτι παρόμοιο με άλλες ενότητες.

Ίσως υπάρχουν περισσότερες βιβλιοθήκες με τις οποίες μπορούμε να πετύχουμε το ίδιο πράγμα. Οι ενότητες που έχουμε χρησιμοποιήσει στο σεμινάριο είναι στάνταρ και χρησιμοποιούνται ευρέως. Μπορείτε να εξερευνήσετε περισσότερα σχετικά με άλλες ενότητες και να επιλέξετε την καλύτερη που σας ταιριάζει.

Μπορείτε επίσης να εξερευνήσετε πώς να υπολογίσετε τη διαφορά ώρας στον python.

Καλή Κωδικοποίηση 🙂