datetime — Βασικοί τύποι ημερομηνίας και ώρας¶
Πηγαίος κώδικας: Lib/datetime.py
Το module datetime παρέχει κλάσεις για την επεξεργασία ημερομηνιών και ωρών.
Ενώ υποστηρίζεται η αριθμητική ημερομηνίας και ώρας, η υλοποίηση εστιάζει στην αποδοτική εξαγωγή χαρακτηριστικών για τη μορφοποίηση και τον χειρισμό της εξόδου.
Πρακτική συμβουλή
Μετάβαση στους κωδικούς μορφοποίησης.
Δείτε επίσης
- Module
calendar Γενικές συναρτήσεις που σχετίζονται με το ημερολόγιο.
- Module
time Πρόσβαση και μετατροπές χρόνου.
- Module
zoneinfo Συγκεκριμένες ζώνες ώρας που αντιπροσωπεύουν τη βάση δεδομένων ζωνών ώρας IANA.
- Πακέτο dateutil
Βιβλιοθήκη τρίτου μέρους με επεκτείνουσα υποστήριξη ζωνών ώρας και ανάλυσης.
- Πακέτο DateType
Βιβλιοθήκη τρίτου μέρους που εισάγει διακριτούς στατικούς τύπους, για να επιτρέπει, π.χ., στους static type checkers να διακρίνουν μεταξύ αδαών και ενήμερων ημερομηνιών και ωρών.
Ενήμερα και Αδαή Αντικείμενα¶
Τα αντικείμενα ημερομηνίας και ώρας μπορούν να κατηγοριοποιηθούν ως «ενήμερα» ή «αδαή» ανάλογα με το αν περιλαμβάνουν ή όχι πληροφορίες ζώνης ώρας.
Με επαρκή γνώση των εφαρμοστέων αλγοριθμικών και πολιτικών ρυθμίσεων χρόνου, όπως πληροφορίες ζώνης ώρας και θερινής ώρας, ένα ενήμερο αντικείμενο μπορεί να εντοπίσει τη θέση του σε σχέση με άλλα ενήμερα αντικείμενα. Ένα ενήμερο αντικείμενο αντιπροσωπεύει μια συγκεκριμένη στιγμή στο χρόνο που δεν υπόκειται σε ερμηνεία. [1]
Ένα αδαές αντικείμενο δεν περιέχει αρκετές πληροφορίες για να εντοπίσει με σαφήνεια τον εαυτό του σε σχέση με άλλα αντικείμενα ημερομηνίας/ώρας. Το αν ένα αδαές αντικείμενο αντιπροσωπεύει Συντονισμένη Παγκόσμια Ώρα (UTC), τοπική ώρα, ή ώρα σε κάποια άλλη ζώνη ώρας εξαρτάται αποκλειστικά από το πρόγραμμα, όπως ακριβώς εξαρτάται από το πρόγραμμα εάν ένας συγκεκριμένος αριθμός αντιπροσωπεύει μέτρα, μίλια ή μάζα. Τα αδαή αντικείμενα είναι εύκολο να κατανοηθούν και να χρησιμοποιηθούν, με κόστος την αγνόηση ορισμένων πτυχών της πραγματικότητας.
Για εφαρμογές που απαιτούν ενήμερα αντικείμενα, τα datetime και time αντικείμενα διαθέτουν ένα προαιρετικό χαρακτηριστικό πληροφοριών ζώνης ώρας, tzinfo, που μπορεί να ρυθμιστεί σε ένα στιγμιότυπο υποκλάσης της αφηρημένης κλάσης tzinfo. Αυτά τα αντικείμενα tzinfo καταγράφουν πληροφορίες σχετικά με την απόκλιση από την ώρα UTC, το όνομα ζώνης ώρας και το αν ισχύει η θερινή ώρα.
Μόνο μία συγκεκριμένη κλάση tzinfo, η κλάση timezone, παρέχεται από το datetime module. Η κλάση timezone μπορεί να αντιπροσωπεύει απλές ζώνες ώρας με σταθερές αποκλίσεις από την UTC, όπως η ίδια η UTC ή οι ζώνες ώρας EST και EDT της Βόρειας Αμερικής. Η υποστήριξη ζωνών ώρας σε βαθύτερα επίπεδα λεπτομέρειας είναι ευθύνη της εφαρμογής. Οι κανόνες για την προσαρμογή του χρόνου σε όλο τον κόσμο είναι περισσότερο πολιτικοί παρά λογικοί, αλλάζουν συχνά και δεν υπάρχει πρότυπο κατάλληλο για κάθε εφαρμογή εκτός από την UTC.
Σταθερές¶
Το datetime module εξάγει τις παρακάτω σταθερές:
- datetime.MINYEAR¶
Ο μικρότερος αριθμός έτους που επιτρέπεται σε ένα αντικείμενο
dateήdatetime. ΤοMINYEARείναι 1.
- datetime.MAXYEAR¶
Ο μεγαλύτερος αριθμός έτους που επιτρέπεται σε ένα αντικείμενο
dateήdatetime. ΤοMAXYEARείναι 9999.
- datetime.UTC¶
Ψευδώνυμο για το μοναδικό αντικείμενο ζώνης ώρας UTC
datetime.timezone.utc.Added in version 3.11.
Διαθέσιμοι Τύποι¶
- class datetime.date
Μια ιδανική αδαής ημερομηνία, υποθέτοντας ότι το τρέχον Γρηγοριανό ημερολόγιο ήταν πάντα σε ισχύ και θα είναι πάντα σε ισχύ. Χαρακτηριστικά:
year,monthκαιday.
- class datetime.time
Μια ιδανική ώρα, ανεξάρτητη από οποιαδήποτε συγκεκριμένη ημέρα, υποθέτοντας ότι κάθε ημέρα έχει ακριβώς 24*60*60 δευτερόλεπτα. (Δεν υπάρχει έννοια «δευτερόλεπτα διακοπής» εδώ.) Χαρακτηριστικά:
hour,minute,second,microsecond, καιtzinfo.
- class datetime.datetime
Μια συνδυασμένη ημερομηνία και ώρα. Χαρακτηριστικά:
year,month,day,hour,minute,second,microsecond, καιtzinfo.
- class datetime.timedelta
Μια διάρκεια που εκφράζει τη διαφορά μεταξύ δύο στιγμιοτύπων
datetimeήdateμε ακρίβεια μικροδευτερολέπτου.
- class datetime.tzinfo
Μια αφηρημένη κλάση βάσης για αντικείμενα πληροφοριών ζώνης ώρας. Αυτά χρησιμοποιούνται από τις κλάσεις
datetimeκαιtimeγια να παρέχουν μια προσαρμόσιμη έννοια προσαρμογής χρόνου (για παράδειγμα, για να ληφθούν υπόψη η ζώνη ώρας και/ή η θερινή ώρα).
- class datetime.timezone
Μια κλάση που υλοποιεί την αφηρημένη κλάση βάσης
tzinfoως μια σταθερή απόκλιση από την UTC.Added in version 3.2.
Αντικείμενα αυτών των τύπων είναι αμετάβλητα.
Σχέσεις υποκλάσεων:
object
timedelta
tzinfo
timezone
time
date
datetime
Κοινά Χαρακτηριστικά¶
Οι date, datetime, time και timezone τύποι έχουν κάποια κοινά χαρακτηριστικά:
Προσδιορίζοντας αν ένα αντικείμενο είναι ενήμερο ή αδαές¶
Αντικείμενα της κλάσης date είναι πάντα αδαή.
Ένα αντικείμενο της time ή datetime μπορεί να είναι ενήμερο ή αδαές.
Ένα αντικείμενα της κλάσης datetime d είναι ενήμερο αν ισχύουν και τα δύο παρακάτω:
το
d.tzinfoδεν είναιNoneτο
d.tzinfo.utcoffset(d)δεν επιστρέφειNone
Διαφορετικά, το d είναι αδαές.
Ένα αντικείμενο time t είναι ενήμερο αν ισχύουν και τα δύο παρακάτω:
το
t.tzinfoδεν είναιNoneτο
t.tzinfo.utcoffset(None)δεν επιστρέφειNone.
Διαφορετικά, το t είναι αδαές.
Ο διαχωρισμός μεταξύ ενήμερων και αδαών δεν ισχύει για τα αντικείμενα timedelta.
timedelta Αντικείμενα¶
Ένα αντικείμενο timedelta αντιπροσωπεύει μια διάρκεια, τη διαφορά μεταξύ δύο στιγμιοτύπων datetime ή date.
- class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)¶
Όλα τα ορίσματα είναι προαιρετικά και με προεπιλογή 0. Τα ορίσματα μπορεί να είναι ακέραιοι ή αριθμοί κινητής υποδιαστολής, και μπορεί να είναι θετικά ή αρνητικά.
Μόνο τα days, seconds και microseconds αποθηκεύονται εσωτερικά. Τα ορίσματα μετατρέπονται σε αυτές τις μονάδες:
Ένα χιλιοστό του δευτερολέπτου μετατρέπεται σε 1000 μικροδευτερόλεπτα.
Ένα λεπτό μετατρέπεται σε 60 δευτερόλεπτα.
Μια ώρα μετατρέπεται σε 3600 δευτερόλεπτα.
Μια εβδομάδα μετατρέπεται σε 7 ημέρες.
και οι ημέρες, τα δευτερόλεπτα και τα μικροδευτερόλεπτα κανονικοποιούνται ώστε η αναπαράσταση να είναι μοναδική με
0 <= microseconds < 10000000 <= seconds < 3600*24(ο αριθμός των δευτερολέπτων σε μια μέρα)-999999999 <= days <= 999999999
Το παρακάτω παράδειγμα δείχνει πώς οποιαδήποτε ορίσματα εκτός από τα days, seconds και microseconds «συγχωνεύονται» και κανονικοποιούνται σε αυτά τα τρία τελικά γνωρίσματα:
>>> from datetime import timedelta >>> delta = timedelta( ... days=50, ... seconds=27, ... microseconds=10, ... milliseconds=29000, ... minutes=5, ... hours=8, ... weeks=2 ... ) >>> # Only days, seconds, and microseconds remain >>> delta datetime.timedelta(days=64, seconds=29156, microseconds=10)
Εάν κάποιο από τα ορίσματα είναι αριθμός κινητής υποδιαστολής και υπάρχουν δεκαδικά μικροδευτερόλεπτα, τα δεκαδικά μικροδευτερόλεπτα που απομένουν από όλα τα ορίσματα συνδυάζονται και το άθροισμά τους στρογγυλοποιείται στο πλησιέστερο μικροδευτερόλεπτο χρησιμοποιώντας τον κανόνα σπασίματος ισοπαλίας (round-half-to-even). Εάν κανένα από τα ορίσματα δεν είναι αριθμός κινητής υποδιαστολής, οι πράξεις μετατροπής και κανονικοποίησης είναι ακριβείς (δεν χάνεται πληροφορία).
Εάν η κανονικοποιημένη τιμή των ημερών βρίσκεται εκτός του καθορισμένου εύρους, γίνεται raise η
OverflowError.Σημειώστε ότι η κανονικοποίηση των αρνητικών τιμών μπορεί να είναι απροσδόκητη στην αρχή. Για παράδειγμα:
>>> from datetime import timedelta >>> d = timedelta(microseconds=-1) >>> (d.days, d.seconds, d.microseconds) (-1, 86399, 999999)
Δεδομένου ότι η συμβολοσειρά αναπαράστασης των αντικειμένων
timedeltaμπορεί να είναι μπερδευτική, χρησιμοποιήστε την παρακάτω συνταγή για να παραγάγετε μια πιο αναγνώσιμη μορφή:>>> def pretty_timedelta(td): ... if td.days >= 0: ... return str(td) ... return f'-({-td!s})' ... >>> d = timedelta(hours=-1) >>> str(d) # not human-friendly '-1 day, 23:00:00' >>> pretty_timedelta(d) '-(1:00:00)'
Χαρακτηριστικά Κλάσης:
- timedelta.max¶
Το πιο θετικό αντικείμενο της
timedelta,timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999).
- timedelta.resolution¶
Η μικρότερη δυνατή διαφορά μεταξύ μη ίσων αντικειμένων
timedelta,timedelta(microseconds=1).
Σημειώστε ότι, λόγω της κανονικοποίησης, το timedelta.max``είναι μεγαλύτερο από το ``-timedelta.min. Το -timedelta.max δεν μπορεί να αναπαρασταθεί ως ένα αντικείμενο timedelta.
Χαρακτηριστικά στιγμιοτύπου (μόνο για ανάγνωση):
- timedelta.days¶
Μεταξύ -999,999,999 και 999,999,999 συμπεριλαμβανομένου.
- timedelta.seconds¶
Μεταξύ 0 και 86,399 συμπεριλαμβανομένου.
Προσοχή
Είναι ένα σχετικά συνηθισμένο σφάλμα ο κώδικας να χρησιμοποιεί κατά λάθος αυτό το χαρακτηριστικό, όταν στην πραγματικότητα προορίζεται να πάρει την τιμή της
total_seconds():>>> from datetime import timedelta >>> duration = timedelta(seconds=11235813) >>> duration.days, duration.seconds (130, 3813) >>> duration.total_seconds() 11235813.0
- timedelta.microseconds¶
Μεταξύ 0 και 999,999 συμπεριλαμβανομένου.
Υποστηριζόμενες πράξεις:
Πράξη |
Αποτέλεσμα |
|---|---|
|
Το άθροισμα των |
|
Η διαφορά του |
|
Πολλαπλασιασμός του διαστήματος με έναν ακέραιο. Στη συνέχεια το |
Γενικά, το |
|
|
Πολλαπλασιασμός του διαστήματος με έναν αριθμό κινητής υποδιαστολής. Το αποτέλεσμα στρογγυλοποιείται στο πλησιέστερο πολλαπλάσιο της timedelta.resolution χρησιμοποιώντας τον κανόνα σπασίματος ισοπαλίας «round-half-to-even». |
|
Διαίρεση (3) της συνολικής διάρκειας |
|
Διαίρεση του διαστήματος με έναν αριθμό κινητής υποδιαστολής ή έναν ακέραιο. Το αποτέλεσμα θα στρογγυλοποιηθεί στο πλησιέστερο πολλαπλάσιο της timedelta.resolution χρησιμοποιώντας τον κανόνα σπασίματος ισοπαλίας «round-half-to-even». |
|
Η ακέραια διαίρεση υπολογίζεται και το υπόλοιπο (εάν υπάρχει) παραλείπεται. Στην δεύτερη περίπτωση, ένα ακέραιος επιστρέφεται. (3) |
|
Το υπόλοιπο υπολογίζεται ως ένα |
|
Υπολογίζει το πηλίκο και το υπόλοιπο: |
|
Επιστρέφει ένα |
|
Ισοδύναμο με |
|
Ισοδύναμο με |
|
Επιστρέφει μια συμβολοσειρά στη μορφή |
|
Επιστρέφει μια συμβολοσειρά αναπαράστασης του |
Σημειώσεις:
Αυτό είναι ακριβές αλλά μπορεί να υπερχειλίσει.
Αυτό είναι ακριβές και δεν μπορεί να υπερχειλίσει.
Η διαίρεση με το μηδέν κάνει raise
ZeroDivisionError.Το
-timedelta.maxδεν μπορεί να αναπαρασταθεί ως έναtimedeltaαντικείμενο.Οι αναπαραστάσεις συμβολοσειράς
timedeltaαντικειμένων είναι κανονικοποιημένες παρόμοια με την εσωτερική τους αναπαράσταση. Αυτό οδηγεί κάπως σε ασυνήθη αποτελέσματα για αρνητικά timedeltas. Για παράδειγμα:>>> timedelta(hours=-5) datetime.timedelta(days=-1, seconds=68400) >>> print(_) -1 day, 19:00:00
Η έκφραση
t2 - t3θα είναι συνέχεια ίση με την έκφρασηt2 + (-t3)εκτός όταν το t3 είναι ίσο μεtimedelta.max∙ σε αυτή τη περίπτωση το πρώτο θα παράγει ένα αποτέλεσμα ενώ το δεύτερο θα υπερχειλίσει.
Εκτός από τις παραπάνω λειτουργίες, τα αντικείμενα timedelta υποστηρίζουν ορισμένες προσθέσεις και αφαιρέσεις με αντικείμενα date και datetime (δείτε παρακάτω).
Άλλαξε στην έκδοση 3.2: Υποστηρίζονται πλέον η ακέραια και η πραγματική διαίρεση ενός αντικειμένου timedelta με άλλο αντικείμενο timedelta, καθώς και οι πράξεις υπολοίπου και η συνάρτηση divmod(). Υποστηρίζονται επίσης η πραγματική διαίρεση και ο πολλαπλασιασμός ενός αντικειμένου timedelta με αντικείμενο float.
Τα αντικείμενα timedelta υποστηρίζουν συγκρίσεις ισότητας και διάταξης.
Σε Boolean συμφραζόμενα, ένα αντικείμενο timedelta θεωρείται αληθές μόνο αν δεν είναι ίσο με timedelta(0).
Μέθοδοι στιγμιοτύπου:
- timedelta.total_seconds()¶
Επιστρέφει το συνολικό αριθμό δευτερολέπτων που περιέχονται στη διάρκεια. Ισοδύναμο με
td / timedelta(seconds=1). Για μονάδες διαστήματος εκτός από δευτερόλεπτα, χρησιμοποιήστε απευθείας τη μορφή διαίρεσης (π.χ.td / timedelta(microseconds=1)).Σημειώστε ότι για πολύ μεγάλα χρονικά διαστήματα (πάνω από 270 χρόνια στις περισσότερες πλατφόρμες) αυτή η μέθοδος θα χάσει ακρίβεια στα microseconds.
Added in version 3.2.
Παραδείγματα χρήσης: timedelta¶
Ένα επιπλέον παράδειγμα κανονικοποίησης:
>>> # Components of another_year add up to exactly 365 days
>>> from datetime import timedelta
>>> year = timedelta(days=365)
>>> another_year = timedelta(weeks=40, days=84, hours=23,
... minutes=50, seconds=600)
>>> year == another_year
True
>>> year.total_seconds()
31536000.0
Παραδείγματα αριθμητικών πράξεων με timedelta:
>>> from datetime import timedelta
>>> year = timedelta(days=365)
>>> ten_years = 10 * year
>>> ten_years
datetime.timedelta(days=3650)
>>> ten_years.days // 365
10
>>> nine_years = ten_years - year
>>> nine_years
datetime.timedelta(days=3285)
>>> three_years = nine_years // 3
>>> three_years, three_years.days // 365
(datetime.timedelta(days=1095), 3)
Αντικείμενα date¶
Ένα αντικείμενο date αναπαριστά μια ημερομηνία (έτος, μήνα και ημέρα) σε ένα ιδεατό ημερολόγιο, το τρέχον Γρηγοριανό ημερολόγιο επεκτεταμένο επ” αόριστον και προς τις δύο κατευθύνσεις.
Η 1η Ιανουαρίου του 1ου έτους ονομάζεται ημέρα 1, η 2α Ιανουαρίου του 1ου έτους ονομάζεται ημέρα 2, και ούτω καθεξής. [2]
- class datetime.date(year, month, day)¶
Όλα τα ορίσματα είναι υποχρεωτικά. Τα ορίσματα πρέπει να είναι ακέραιοι αριθμοί, στα παρακάτω εύρη:
MINYEAR <= year <= MAXYEAR1 <= month <= 121 <= day <= number of days in the given month and year
Εάν ένα όρισμα εκτός αυτών των ευρών δοθεί, γίνεται raise
ValueError.
Άλλοι κατασκευαστές, όλες οι μέθοδοι της κλάσης:
- classmethod date.today()¶
Επιστρέφει την τρέχουσα τοπική ημερομηνία.
Αυτό είναι ισοδύναμο με
date.fromtimestamp(time.time()).
- classmethod date.fromtimestamp(timestamp)¶
Επιστρέφει την τοπική ημερομηνία που αντιστοιχεί στο POSIX timestamp, όπως επιστρέφεται από την
time.time().Αυτό μπορεί να κάνει raise
OverflowError, εάν το timestamp είναι εκτός του εύρους τιμών που υποστηρίζει η συνάρτησηlocaltime()της πλατφόρμας C, καθώς καιOSErrorσε περίπτωση αποτυχίας τηςlocaltime(). Είναι κοινό αυτό να περιορίζεται σε έτη από το 1970 έως το 2038. Σημειώστε ότι σε μη POSIX συστήματα που περιλαμβάνουν δευτερόλεπτα διαλείμματος στην έννοια τους για ένα timestamp, τα δευτερόλεπτα διαλείμματος αγνοούνται από τηνfromtimestamp().Άλλαξε στην έκδοση 3.3: Κάνει raise
OverflowErrorαντί γιαValueErrorεάν το timestamp είναι εκτός του εύρους τιμών που υποστηρίζει η συνάρτησηlocaltime()της πλατφόρμας C. Κάνει raiseOSErrorαντί γιαValueErrorσε περίπτωση αποτυχίας τηςlocaltime().
- classmethod date.fromordinal(ordinal)¶
Επιστρέφει την ημερομηνία που αντιστοιχεί στο προληπτικό Γρηγοριανό αριθμό, όπου η 1η Ιανουαρίου του 1ου έτους έχει αριθμό 1.
Γίνεται raise η
ValueErrorεκτός εάν1 <= ordinal <= date.max.toordinal(). Για οποιαδήποτε ημέραd,date.fromordinal(d.toordinal()) == d.
- classmethod date.fromisoformat(date_string)¶
Επιστρέφει ένα αντικείμενο
dateπου αντιστοιχεί σε ένα date_string δοσμένο σε οποιαδήποτε έγκυρη μορφή ISO 8601, με τις εξής εξαιρέσεις:Οι ημερομηνίες μειωμένης ακρίβειας δεν υποστηρίζονται προς το παρόν (
YYYY-MM,YYYY).Οι εκτεταμένες αναπαραστάσεις ημερομηνίας δεν υποστηρίζονται προς το παρόν (
±YYYYYY-MM-DD).Οι διατακτικές ημερομηνίες δεν υποστηρίζονται προς το παρόν (
YYYY-OOO).
Παραδείγματα:
>>> from datetime import date >>> date.fromisoformat('2019-12-04') datetime.date(2019, 12, 4) >>> date.fromisoformat('20191204') datetime.date(2019, 12, 4) >>> date.fromisoformat('2021-W01-1') datetime.date(2021, 1, 4)
Added in version 3.7.
Άλλαξε στην έκδοση 3.11: Προηγουμένως, αυτή η μέθοδος υποστήριζε μόνο τη μορφή
YYYY-MM-DD.
- classmethod date.fromisocalendar(year, week, day)¶
Επιστρέφει ένα αντικείμενο
dateπου αντιστοιχεί στην ημερομηνία του ISO ημερολογίου που καθορίζεται από το έτος, την εβδομάδα και την ημέρα. Αυτό είναι το αντίστροφο της συνάρτησηςdate.isocalendar().Added in version 3.8.
- classmethod date.strptime(date_string, format)¶
Επιστρέφει ένα αντικείμενο
dateπου αντιστοιχεί σε date_string, αναλυμένο σύμφωνα με το format. Αυτό είναι ισοδύναμο με:date(*(time.strptime(date_string, format)[0:3]))
Η
ValueErrorγίνεται raise εάν το date_string και το format δεν μπορούν να αναλυθούν από τηνtime.strptime()ή εάν επιστρέφει μια τιμή που δεν είναι τουλάχιστον μια πλειάδα χρόνου. Δείτε επίσης τα Η συμπεριφορά των strftime() και strptime() καιdate.fromisoformat().Σημείωση
Εάν το format καθορίζει μια ημέρα του μήνα χωρίς έτος, μια
DeprecationWarningπροκύπτει. Αυτό γίνεται για να αποφευχθεί ένα σφάλμα τετραετούς δίσεκτου έτους στον κώδικα που προσπαθεί να αναλύσει μόνο έναν μήνα και μια ημέρα, καθώς το προεπιλεγμένο έτος που χρησιμοποιείται σε περίπτωση απουσίας του στη μορφή δεν είναι δίσεκτο έτος. Τέτοιες τιμές format μπορεί να προκαλέσουν σφάλμα από την έκδοση 3.15 της Python και μετά. Η λύση είναι να συμπεριλαμβάνετε πάντα ένα έτος στη μορφή σας. Εάν αναλύετε τιμές date_string που δεν έχουν έτος, προσθέστε ρητά ένα έτος που είναι δίσεκτο πριν από την ανάλυση:>>> from datetime import date >>> date_string = "02/29" >>> when = date.strptime(f"{date_string};1984", "%m/%d;%Y") # Avoids leap year bug. >>> when.strftime("%B %d") 'February 29'
Added in version 3.14.
Χαρακτηριστικά Κλάσης:
- date.min¶
Το νωρίτερο αναπαραστάσιμο έτος,
date(MINYEAR, 1, 1).
- date.max¶
Το πιο πρόσφατο αναπαραστάσιμο έτος,
date(MAXYEAR, 12, 31).
- date.resolution¶
Η μικρότερη δυνατή διαφορά μεταξύ μη-ίσων αντικειμένων ημέρας,
timedelta(days=1).
Χαρακτηριστικά στιγμιοτύπου (μόνο για ανάγνωση):
- date.month¶
Μεταξύ 1 και 12 συμπεριλαμβανομένων.
- date.day¶
Μεταξύ 1 και του αριθμού των ημερών στον δεδομένο μήνα του δεδομένου έτους.
Υποστηριζόμενες πράξεις:
Πράξη |
Αποτέλεσμα |
|---|---|
|
Το |
|
Υπολογίζει το |
|
(3) |
date1 == date2date1 != date2 |
Σύγκριση ισότητας. (4) |
date1 < date2date1 > date2date1 <= date2date1 >= date2 |
Σύγκριση σειράς. (5) |
Σημειώσεις:
Το date2 μετακινείται προς τα εμπρός στο χρόνο εάν
timedelta.days > 0, ή προς τα πίσω εάνtimedelta.days < 0. Έπειταdate2 - date1 == timedelta.days. Ταtimedelta.secondsκαιtimedelta.microsecondsαγνοούνται. ΗOverflowErrorγίνεται raise εάν τοdate2.yearθα ήταν μικρότερο απόMINYEARή μεγαλύτερο απόMAXYEAR.τα
timedelta.secondsκαιtimedelta.microsecondsαγνοούνται.Αυτό είναι ακριβές και δεν μπορεί να υπερχειλίσει. Τα
timedelta.secondsκαιtimedelta.microsecondsείναι 0, καιdate2 + timedelta == date1μετά.Τα
dateαντικείμενα είναι ίσα εάν αναπαριστούν την ίδια ημερομηνία.Τα
dateαντικείμενα που δεν είναι επίσηςdatetimeστιγμιότυπα δεν είναι ποτέ ίσα μεdatetimeαντικείμενα, ακόμη και αν αναπαριστούν την ίδια ημερομηνία.Το date1 θεωρείται μικρότερο από το date2 όταν το date1 προηγείται του date2 στο χρόνο. Με άλλα λόγια,
date1 < date2αν και μόνο ανdate1.toordinal() < date2.toordinal().Η σύγκριση σειράς μεταξύ ενός αντικειμένου
dateπου δεν είναι επίσης στιγμιότυποdatetimeκαι ενός αντικειμένουdatetimeπροκαλείTypeError.
Άλλαξε στην έκδοση 3.13: Η σύγκριση μεταξύ ενός αντικειμένου datetime και ενός στιγμιοτύπου της υποκλάσης date που δεν είναι υποκλάση του datetime δεν μετατρέπει πλέον το τελευταίο σε date, αγνοώντας το μέρος χρόνου και τη ζώνη ώρας. Η προεπιλεγμένη συμπεριφορά μπορεί να αλλάξει με την υπερκάλυψη των ειδικών μεθόδων σύγκρισης σε υποκλάσεις.
Στα Boolean περιεχόμενα, όλα τα αντικείμενα date θεωρούνται αληθή.
Μέθοδοι στιγμιοτύπου:
- date.replace(year=self.year, month=self.month, day=self.day)¶
Επιστρέφει ένα νέο αντικείμενο της
dateμε τις ίδιες τιμές, αλλά με ενημερωμένες παραμέτρους.Παράδειγμα:
>>> from datetime import date >>> d = date(2002, 12, 31) >>> d.replace(day=26) datetime.date(2002, 12, 26)
Η γενική συνάρτηση
copy.replace()υποστηρίζει επίσης ταdateαντικείμενα.
- date.timetuple()¶
Επιστρέφει μια
time.struct_timeόπως επιστρέφεται από τηνtime.localtime().Οι ώρες, τα λεπτά και τα δευτερόλεπτα είναι 0, και το DST flag είναι -1.
Το
d.timetuple()είναι ισοδύναμο με:time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))
όπου
yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1είναι ο αριθμός της ημέρας εντός του τρέχοντος έτους ξεκινώντας από 1 για την 1η Ιανουαρίου.
- date.toordinal()¶
Επιστρέφει το προληπτικό Γρηγοριανό αριθμό της ημερομηνίας, όπου η 1η Ιανουαρίου του 1ου έτους έχει αριθμό 1. Για οποιοδήποτε αντικείμενο
dated,date.fromordinal(d.toordinal()) == d.
- date.weekday()¶
Επιστρέφει την ημέρα του έτους ως έναν ακέραιο, όπου η Δευτέρα είναι 0 και η Κυριακή είναι 6. Για παράδειγμα,
date(2002, 12, 4).weekday() == 2, ως Τετάρτη. Δείτε επίσηςisoweekday().
- date.isoweekday()¶
Επιστρέφει την ημέρα της εβδομάδα ως έναν ακέραιο, όπου η Δευτέρα είναι 1 και η Κυριακή είναι 7. Για παράδειγμα,
date(2002, 12, 4).isoweekday() == 3, μια Τετάρτη. Δείτε επίσηςweekday(),isocalendar().
- date.isocalendar()¶
Επιστρέφει ένα αντικείμενο named tuple με τρία στοιχεία
year,weekκαιweekday.Το ημερολόγιο ISO είναι μια ευρέως χρησιμοποιούμενη εκδοχή τους Γρηγοριανού ημερολογίου. [3]
Το ISO έτος αποτελείται από 52 ή 53 πλήρες εβδομάδες, όπου μια εβδομάδα ξεκινάει από την ημέρα Δευτέρα και τελειώνει με την ημέρα Κυριακή. Η πρώτη εβδομάδα ενός ISO έτους είναι η πρώτη (Γρηγοριανή) ημερολογιακή εβδομάδα ενός έτους που περιλαμβάνει μια Πέμπτη. Αυτό καλείται εβδομάδα νούμερο 1, και το ISO έτος αυτής της Πέμπτης είναι ίδιο με το Γρηγοριανό έτος.
Για παράδειγμα, το 2004 ξεκινά με Πέμπτη, συνεπώς η πρώτη εβδομάδα του ISO έτους 2004 ξεκινάει τη Δευτέρα 29 Δεκεμβρίου 2003, και τελειώνει την Κυριακή, 4 Ιανουαρίου 2004:
>>> from datetime import date >>> date(2003, 12, 29).isocalendar() datetime.IsoCalendarDate(year=2004, week=1, weekday=1) >>> date(2004, 1, 4).isocalendar() datetime.IsoCalendarDate(year=2004, week=1, weekday=7)
Άλλαξε στην έκδοση 3.9: Το αποτέλεσμα άλλαξε από μια πλειάδα σε ένα named tuple.
- date.isoformat()¶
Επιστρέφει μια συμβολοσειρά που αναπαριστά την ημέρα σε μορφή ISO 8601,
YYYY-MM-DD:>>> from datetime import date >>> date(2002, 12, 4).isoformat() '2002-12-04'
- date.__str__()¶
Για μια ημέρα
d, τοstr(d)είναι ισοδύναμο μεd.isoformat().
- date.ctime()¶
Επιστρέφει μια συμβολοσειρά που αναπαριστά την ημέρα:
>>> from datetime import date >>> date(2002, 12, 4).ctime() 'Wed Dec 4 00:00:00 2002'
Το
d.ctime()είναι ισοδύναμο με:time.ctime(time.mktime(d.timetuple()))
σε πλατφόρμες όπου η εγγενής C
ctime()συνάρτηση (την οποία καλεί ηtime.ctime(), αλλά την οποία δεν καλεί ηdate.ctime()) συμμορφώνεται με το πρότυπο C.
- date.strftime(format)¶
Επιστρέφει μια συμβολοσειρά που αναπαριστά την ημερομηνία, ελεγχόμενη από μια ρητή συμβολοσειρά μορφοποίησης. Οι κωδικοί μορφοποίησης που αναφέρονται σε ώρες, λεπτά ή δευτερόλεπτα θα εμφανίζουν τιμές 0. Δείτε επίσης τα Η συμπεριφορά των strftime() και strptime() και
date.isoformat().
- date.__format__(format)¶
Ίδιο με τη μέθοδο
date.strftime(). Αυτό επιτρέπει να ορίσετε μια συμβολοσειρά μορφοποίησης για ένα αντικείμενοdateσε μορφοποιημένες συμβολοσειρές και κατά τη χρήση τηςstr.format(). Δείτε επίσης τα Η συμπεριφορά των strftime() και strptime() καιdate.isoformat().
Παραδείγματα Χρήσης: date¶
Παράδειγμα μέτρησης ημερών για ένα γεγονός:
>>> import time
>>> from datetime import date
>>> today = date.today()
>>> today
datetime.date(2007, 12, 5)
>>> today == date.fromtimestamp(time.time())
True
>>> my_birthday = date(today.year, 6, 24)
>>> if my_birthday < today:
... my_birthday = my_birthday.replace(year=today.year + 1)
...
>>> my_birthday
datetime.date(2008, 6, 24)
>>> time_to_birthday = abs(my_birthday - today)
>>> time_to_birthday.days
202
Περισσότερα παραδείγματα χρήσης της date:
>>> from datetime import date
>>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
>>> d
datetime.date(2002, 3, 11)
>>> # Methods related to formatting string output
>>> d.isoformat()
'2002-03-11'
>>> d.strftime("%d/%m/%y")
'11/03/02'
>>> d.strftime("%A %d. %B %Y")
'Monday 11. March 2002'
>>> d.ctime()
'Mon Mar 11 00:00:00 2002'
>>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
'The day is 11, the month is March.'
>>> # Methods for to extracting 'components' under different calendars
>>> t = d.timetuple()
>>> for i in t:
... print(i)
2002 # year
3 # month
11 # day
0
0
0
0 # weekday (0 = Monday)
70 # 70th day in the year
-1
>>> ic = d.isocalendar()
>>> for i in ic:
... print(i)
2002 # ISO year
11 # ISO week number
1 # ISO day number ( 1 = Monday )
>>> # A date object is immutable; all operations produce a new object
>>> d.replace(year=2005)
datetime.date(2005, 3, 11)
datetime Αντικείμενα¶
Ένα αντικείμενο datetime είναι ένα ενιαίο αντικείμενο που περιέχει όλες τις πληροφορίες ενός αντικειμένου date και ενός αντικειμένου time.
Όπως ένα αντικείμενο date, η datetime υποθέτει το Γρηγοριανό ημερολόγιο επεκταμένο και στις δύο κατευθύνσεις. Όπως ένα αντικείμενο time, η datetime υποθέτει ότι υπάρχουν ακριβώς 3600*24 δευτερόλεπτα σε κάθε ημέρα.
Κατασκευαστής:
- class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)¶
Τα ορίσματα year, month και day είναι υποχρεωτικά. Το tzinfo μπορεί να είναι
None, ή ένα στιγμιότυπο μιας υποκλάσηςtzinfo. Οι υπόλοιπες παράμετροι θα πρέπει να είναι ακέραιοι στα παρακάτω εύρη:MINYEAR <= year <= MAXYEAR,1 <= month <= 12,1 <= day <= number of days in the given month and year,0 <= hour < 24,0 <= minute < 60,0 <= second < 60,0 <= microsecond < 1000000,fold in [0, 1].
Εάν ένα όρισμα εκτός αυτών των ευρών δοθεί, γίνεται raise
ValueError.Άλλαξε στην έκδοση 3.6: Προστέθηκε η παράμετρος fold.
Άλλοι κατασκευαστές, όλες οι μέθοδοι της κλάσης:
- classmethod datetime.today()¶
Επιστρέφει την τρέχουσα τοπική ημερομηνία και ώρα, με
tzinfoNone.Ισοδύναμο με:
datetime.fromtimestamp(time.time())
Δείτε επίσης
now(),fromtimestamp().Αυτή η μέθοδος είναι λειτουργικά ισοδύναμη με την
now(), αλλά χωρίς την παράμετροtz.
- classmethod datetime.now(tz=None)¶
Επιστρέφει την τρέχουσα τοπική ημερομηνία και ώρα.
Εάν το προαιρετικό όρισμα tz είναι
Noneή δεν έχει οριστεί, είναι σαν τη μέθοδοtoday(), αλλά, αν είναι δυνατόν, παρέχει μεγαλύτερη ακρίβεια από αυτή που μπορεί να ληφθεί μέσω ενός timestamp από τηνtime.time()(για παράδειγμα, αυτό μπορεί να είναι δυνατό σε πλατφόρμες που παρέχουν τη συνάρτησηgettimeofday()της C).Εάν το tz δεν είναι
None, θα πρέπει να είναι ένα στιγμιότυπο της υποκλάσηςtzinfoκαι η τρέχουσα ημερομηνία και ώρα θα μετατραπούν στην ζώνη ώρας του tz.Αυτή η συνάρτηση προτιμάται έναντι των
today()καιutcnow().Σημείωση
Οι επόμενες κλήσεις στην
datetime.now()ενδέχεται να επιστρέψουν την ίδια χρονική στιγμή, ανάλογα με την ακρίβεια του υποκείμενου ρολογιού.
- classmethod datetime.utcnow()¶
Επιστρέφει την τρέχουσα UTC ημερομηνία και ώρα, με το
tzinfoNone.Αυτό είναι σαν τη
now(), αλλά επιστρέφει την τρέχουσα ημερομηνία και ώρα UTC, ως ένα απλό αντικείμενοdatetime. Μια ενημερωμένη τρέχουσα ημερομηνία/ ώρα UTC μπορεί να ληφθεί καλώντας τοdatetime.now(timezone.utc). Δείτε επίσης τηνnow().Προειδοποίηση
Επειδή τα αδαή αντικείμενα
datetimeαντιμετωπίζονται από πολλές μεθόδουςdatetimeως τοπικές ώρες, προτιμάται η χρήση ενήμερων datetimes για την αναπαράσταση των χρόνων σε UTC. Ως εκ τούτου, ο συνιστώμενος τρόπος για να δημιουργήσετε ένα αντικείμενο που αναπαριστά την τρέχουσα ώρα σε UTC είναι καλώντας τοdatetime.now(timezone.utc).Αποσύρθηκε στην έκδοση 3.12: Χρησιμοποιήστε την
datetime.now()μεUTCκαλύτερα.
- classmethod datetime.fromtimestamp(timestamp, tz=None)¶
Επιστρέφει την τοπική ημερομηνία και ώρα που αντιστοιχεί στη χρονική σήμανση POSIX, όπως αυτή που επιστρέφεται από την
time.time(). Εάν το προαιρετικό όρισμα tz είναιNoneή δεν έχει καθοριστεί, η χρονική σήμανση μετατρέπεται στην τοπική ημερομηνία και ώρα της πλατφόρμας και το αντικείμενοdatetimeπου επιστρέφεται είναι αδαές.Εάν το tz δεν είναι
None, πρέπει να είναι μια παρουσία μιας υποκλάσηςtzinfoκαι η χρονική σήμανση μετατρέπεται στη ζώνη ώρας του tz.Η
fromtimestamp()μπορεί να κάνει raise μιαOverflowError, εάν η χρονική σήμανση είναι εκτός του εύρους τιμών που υποστηρίζονται από τις συναρτήσειςlocaltime()ήgmtime()της πλατφόρμας C, και το σφάλμαOSErrorσε περίπτωση σφάλματοςlocaltime()ήgmtime(). Είναι σύνηθες αυτό να περιορίζεται στα έτη από το 1970 έως το 2038. Σημειώστε ότι σε συστήματα εκτός POSIX που περιλαμβάνουν δευτερόλεπτα άλματος στην έννοια της χρονικής σήμανσης, τα δευτερόλεπτα άλματος αγνοούνται από τηfromtimestamp(), και στη συνέχεια είναι πιθανό να υπάρχουν δύο χρονικές σημάνσεις που διαφέρουν κατά ένα δευτερόλεπτο και αποδίδουν πανομοιότυπα αντικείμεναdatetime. Αυτή η μέθοδος προτιμάται έναντι τηςutcfromtimestamp().Άλλαξε στην έκδοση 3.3: Κάνει raise την
OverflowErrorαντί για τηValueErrorεάν η χρονική σήμανση είναι εκτός του εύρους τιμών που υποστηρίζονται από τις συναρτήσειςlocaltime()ήgmtime()της πλατφόρμας C. Κάνει raise τηνOSErrorαντί για τηValueErrorσε περίπτωση σφάλματος τωνlocaltime()ήgmtime().Άλλαξε στην έκδοση 3.6: Η
fromtimestamp()ενδέχεται να επιστρέψει στιγμιότυπα με τοfoldορισμένο σε 1.
- classmethod datetime.utcfromtimestamp(timestamp)¶
Επιστρέφει το UTC
datetimeπου αντιστοιχεί στο POSIX timestamp, με τοtzinfoNone. (Το αντικείμενο που προκύπτει είναι αδαές.)Αυτό μπορεί να κάνει raise μια
OverflowError, εάν το timestamp βρίσκεται εκτός του εύρους τιμών που υποστηρίζεται από τη συνάρτησηgmtime()της πλατφόρμας C, καιOSErrorσε περίπτωση αποτυχίας τηςgmtime(). Είναι σύνηθες αυτό να περιορίζεται σε έτη από το 1970 έως το 2038.Για να λάβετε ένα ενήμερο αντικείμενο
datetime, καλέστε τηνfromtimestamp():datetime.fromtimestamp(timestamp, timezone.utc)
Σε πλατφόρμες συμβατές με POSIX, είναι ισοδύναμο με την ακόλουθη έκφραση:
datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
εκτός από το ότι ο δεύτερος τύπος υποστηρίζει πάντα το πλήρες εύρος ετών: από το
MINYEARέως και τοMAXYEAR.Προειδοποίηση
Επειδή τα αδαή αντικείμενα
datetimeαντιμετωπίζονται από πολλές μεθόδους τηςdatetimeως τοπικές ώρες, προτιμάται η χρήση ενήμερων αντικειμένων datetime για την αναπαράσταση χρόνων σε UTC. Ως εκ τούτου, ο προτεινόμενος τρόπος για τη δημιουργία ενός αντικειμένου που αναπαριστά μια συγκεκριμένη χρονική σήμανση σε UTC είναι η κλήση τηςdatetime.fromtimestamp(timestamp, tz=timezone.utc).Άλλαξε στην έκδοση 3.3: Κάνει raise
OverflowErrorαντί τηςValueErrorεάν το timestamp είναι εκτός του εύρους τιμών που υποστηρίζεται από τη συνάρτησηgmtime()της πλατφόρμας C. Κάνει raiseOSErrorαντί τηςValueErrorσε περίπτωση αποτυχίας τηςgmtime().Αποσύρθηκε στην έκδοση 3.12: Χρησιμοποιεί εναλλακτικά τη
datetime.fromtimestamp()με τοUTC.
- classmethod datetime.fromordinal(ordinal)¶
Επιστέφει τη
datetimeπου αντιστοιχεί στον προληπτικό Γρηγοριανό ταξινομητή, όπου η 1η Ιανουαρίου του 1ου έτους έχει ταξινομητή 1. ΗValueErrorγίνεται raise εκτός εάν1 <= ordinal <= datetime.max.toordinal(). Η ώρα, το λεπτό, το δευτερόλεπτο και το μικροδευτερόλεπτο του αποτελέσματος είναι όλα 0, και τοtzinfoείναιNone.
- classmethod datetime.combine(date, time, tzinfo=time.tzinfo)¶
Επιστρέφει ένα νέο αντικείμενο
datetimeπου έχει τα ίδια ημερολογιακά στοιχεία με το δοθέν αντικείμενοdate, και τα ίδια χρονικά στοιχεία με το δοθέν αντικείμενοtime. Εάν παρέχεται το όρισμα tzinfo, η τιμή του χρησιμοποιείται για να ορίσει τοtzinfoτου αποτελέσματος, διαφορετικά χρησιμοποιείται τοtzinfoτου ορίσματος time. Εάν το όρισμα date είναι ένα αντικείμενοdatetime, τα χρονικά στοιχεία και ταtzinfoαγνοούνται.Για οποιοδήποτε αντικείμενο
datetimed,d == datetime.combine(d.date(), d.time(), d.tzinfo).Άλλαξε στην έκδοση 3.6: Προστέθηκε το όρισμα tzinfo.
- classmethod datetime.fromisoformat(date_string)¶
Επιστρέφει μια
datetimeπου αντιστοιχεί σε μια date_string σε οποιαδήποτε έγκυρη μορφή ISO 8601, με τις εξής εξαιρέσεις:Οι αποκλίσεις ζώνης ώρας μπορεί να έχουν κλασματικά δευτερόλεπτα.
Ο διαχωριστής
Tμπορεί να αντικατασταθεί από οποιονδήποτε μόνο χαρακτήρα unicode.Οι κλασματικές ώρες και λεπτά δεν υποστηρίζονται.
Οι ημερομηνίες μειωμένης ακρίβειας δεν υποστηρίζονται προς το παρόν (
YYYY-MM,YYYY).Οι εκτεταμένες αναπαραστάσεις ημερομηνίας δεν υποστηρίζονται προς το παρόν (
±YYYYYY-MM-DD).Οι διατακτικές ημερομηνίες δεν υποστηρίζονται προς το παρόν (
YYYY-OOO).
Παραδείγματα:
>>> from datetime import datetime >>> datetime.fromisoformat('2011-11-04') datetime.datetime(2011, 11, 4, 0, 0) >>> datetime.fromisoformat('20111104') datetime.datetime(2011, 11, 4, 0, 0) >>> datetime.fromisoformat('2011-11-04T00:05:23') datetime.datetime(2011, 11, 4, 0, 5, 23) >>> datetime.fromisoformat('2011-11-04T00:05:23Z') datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone.utc) >>> datetime.fromisoformat('20111104T000523') datetime.datetime(2011, 11, 4, 0, 5, 23) >>> datetime.fromisoformat('2011-W01-2T00:05:23.283') datetime.datetime(2011, 1, 4, 0, 5, 23, 283000) >>> datetime.fromisoformat('2011-11-04 00:05:23.283') datetime.datetime(2011, 11, 4, 0, 5, 23, 283000) >>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00') datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc) >>> datetime.fromisoformat('2011-11-04T00:05:23+04:00') datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
Added in version 3.7.
Άλλαξε στην έκδοση 3.11: Προηγουμένως, αυτή η μέθοδος υποστήριζε μόνο μορφές που μπορούσαν να εκδοθούν από τις μεθόδους
date.isoformat()ήdatetime.isoformat().
- classmethod datetime.fromisocalendar(year, week, day)¶
Επιστρέφει μια
datetimeπου αντιστοιχεί στην ημερομηνία του ISO ημερολογίου που καθορίζεται από το έτος, την εβδομάδα και την ημέρα. Τα μη ημερολογιακά μέρη του αντικειμένου datetime συμπληρώνονται με τις κανονικές προεπιλεγμένες τιμές τους. Αυτή είναι η αντίστροφη λειτουργία της μεθόδουdatetime.isocalendar().Added in version 3.8.
- classmethod datetime.strptime(date_string, format)¶
Επιστρέφει μια
datetimeπου αντιστοιχεί στο date_string, αναλυμένο σύμφωνα με το format.Εάν το format δεν περιέχει μικροδευτερόλεπτα ή πληροφορίες ζώνης ώρας, αυτό είναι ισοδύναμο με:
datetime(*(time.strptime(date_string, format)[0:6]))
Η
ValueErrorγίνεται raise εάν το date_string και το format δεν μπορούν να αναλυθούν από τηtime.strptime()ή αν αυτή επιστρέψει μια τιμή που δεν είναι χρονική πλειάδα. Δείτε επίσης Η συμπεριφορά των strftime() και strptime() καιdatetime.fromisoformat().Άλλαξε στην έκδοση 3.13: Εάν το format καθορίζει μια μέρα ενός μήνα χωρίς έτος, μια
DeprecationWarningεκπέμπεται. Αυτό γίνεται για να αποφευχθεί ένα σφάλμα που σχετίζεται με τα δίσεκτα έτη κάθε τέσσερα χρόνια σε κώδικα που προσπαθεί να αναλύσει μόνο μήνα και ημέρα, καθώς το προεπιλεγμένο έτος που χρησιμοποιείται όταν λείπει είναι μη δίσεκτο. Τέτοιες τιμές format μπορεί να κάνουν raise σφάλμα από την έκδοση 3.15 της Python και μετά. Η λύση είναι να περιλαμβάνετε πάντα ένα έτος στο format σας. Εάν αναλύετε τιμές date_string που δεν περιέχουν έτος, προσθέστε ρητά ένα δίσεκτο έτος πριν από την ανάλυση:>>> from datetime import datetime >>> date_string = "02/29" >>> when = datetime.strptime(f"{date_string};1984", "%m/%d;%Y") # Avoids leap year bug. >>> when.strftime("%B %d") 'February 29'
Χαρακτηριστικά Κλάσης:
- datetime.max¶
Η τελευταία αναπαραστάσιμη τιμή
datetime,datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None).
- datetime.resolution¶
Η μικρότερη δυνατή διαφορά μεταξύ μη ίσων αντικειμένων
datetimeobjects,timedelta(microseconds=1).
Χαρακτηριστικά στιγμιοτύπου (μόνο για ανάγνωση):
- datetime.month¶
Μεταξύ 1 και 12 συμπεριλαμβανομένων.
- datetime.day¶
Μεταξύ 1 και του αριθμού των ημερών στον δεδομένο μήνα του δεδομένου έτους.
- datetime.hour¶
Στο
range(24).
- datetime.minute¶
Στο
range(60).
- datetime.second¶
Στο
range(60).
- datetime.microsecond¶
Στο
range(1000000).
- datetime.tzinfo¶
Το αντικείμενο που δόθηκε ως όρισμα tzinfo στον κατασκευαστή
datetimeήNoneαν δεν δόθηκε κανένα.
- datetime.fold¶
Στο
[0, 1]. Χρησιμοποιείται για την αποσαφήνιση των τοπικών ωρών σε επαναλαμβανόμενο διάστημα. (Ένα επαναλαμβανόμενο διάστημα συμβαίνει όταν τα ρολόγια γυρίζουν πίσω στο τέλος της θερινής ώρας ή όταν οι αποκλίσεις UTC για την τρέχουσα ζώνη μειώνεται για πολιτικούς λόγους.) Οι τιμές 0 και 1 αντιπροσωπεύουν, αντίστοιχα, την πρώτη και τη δεύτερη από τις δύο χρονικές στιγμές με την ίδια αναπαράσταση τοπικής ώρας.Added in version 3.6.
Υποστηριζόμενες πράξεις:
Πράξη |
Αποτέλεσμα |
|---|---|
|
(1) |
|
(2) |
|
(3) |
datetime1 == datetime2datetime1 != datetime2 |
Σύγκριση ισότητας. (4) |
datetime1 < datetime2datetime1 > datetime2datetime1 <= datetime2datetime1 >= datetime2 |
Σύγκριση σειράς. (5) |
Το
datetime2είναι μια διάρκεια τουtimedeltaπου αφαιρείται από τοdatetime1, μετακινώντας το προς τα εμπρός στο χρόνο εάνtimedelta.days > 0, ή προς τα πίσω εάνtimedelta.days < 0. Το αποτέλεσμα έχει το ίδιοtzinfoμε το εισαγόμενο datetime, καιdatetime2 - datetime1 == timedeltaμετά. ΗOverflowErrorγίνεται raise εάν τοdatetime2.yearείναι μικρότερο από τοMINYEARή μεγαλύτερο από τοMAXYEAR. Σημειώστε ότι δεν γίνονται προσαρμογές ζώνης ώρας ακόμη και αν το εισαγόμενο αντικείμενο είναι ενήμερο.Υπολογίζει το
datetime2έτσι ώστεdatetime2 + timedelta == datetime1. Όπως και για την πρόσθεση, το αποτέλεσμα έχει το ίδιοtzinfoμε το εισαγόμενο datetime, και δεν γίνονται προσαρμογές ζώνης ώρας ακόμη και αν το εισαγόμενο αντικείμενο είναι ενήμερο.Η αφαίρεση ενός
datetimeαπό ένα άλλοdatetimeορίζεται μόνο εάν και οι δύο όροι είναι αδαείς, ή εάν και οι δύο είναι ενήμεροι. Εάν ο ένας είναι ενήμερος και ο άλλος αδαής, γίνεται raise ηTypeError.Εάν και οι δύο είναι αδαείς, ή και οι δύο είναι ενήμεροι και έχουν το ίδιο
tzinfoattribute, ταtzinfoαγνοούνται, και το αποτέλεσμα είναι ένα αντικείμενοtimedeltatτέτοιο ώστεdatetime2 + t == datetime1. Σε αυτή την περίπτωση δεν γίνονται προσαρμογές ζώνης ώρας.Εάν και οι δύο είναι ενήμεροι και έχουν διαφορετικά χαρακτηριστικά
tzinfo,a-bενεργεί σαν να είχαν πρώτα μετατραπεί σε αδαή UTC datetimes. Το αποτέλεσμα είναι(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None) - b.utcoffset())με την εξαίρεση η υλοποίηση δεν υπερχειλίζει ποτέ.Τα αντικείμενα
datetimeείναι ίσα εάν αναπαριστούν την ίδια ημερομηνία και ώρα, λαμβάνοντας υπόψη τη ζώνη ώρας.Αδαή και ενήμερα αντικείμενα
datetimeδεν είναι ποτέ ίσα.Εάν και οι δύο συγκρινόμενοι είναι ενήμεροι, και έχουν το ίδιο χαρακτηριστικό
tzinfo, ταtzinfoκαιfoldαγνοούνται και οι βασικές ημερομηνίες συγκρίνονται. Εάν και οι δύο συγκρινόμενοι είναι ενήμεροι και έχουν διαφορετικά χαρακτηριστικάtzinfo, η σύγκριση ενεργεί σαν να είχαν πρώτα μετατραπεί σε αδαή UTC datetimes με την εξαίρεση ότι η υλοποίηση δεν υπερχειλίζει ποτέ. Τα αντικείμεναdatetimeσε επαναλαμβανόμενο διάστημα δεν είναι ποτέ ίσα με τα αντικείμεναdatetimeσε άλλη ζώνη ώρας.Το datetime1 θεωρείται μικρότερο από το datetime2 όταν το datetime1 προηγείται από το datetime2 στο χρόνο, λαμβάνοντας υπόψη τη ζώνη ώρας.
Η σύγκριση διάταξης μεταξύ αδαών και ενήμερων αντικειμένων
datetimeκάνει raiseTypeError.Εάν και οι δύο συγκρινόμενοι είναι ενήμεροι, και έχουν το ίδιο χαρακτηριστικό
tzinfo, τα χαρακτηριστικάtzinfoκαιfoldαγνοούνται και η βασική ημερομηνία συγκρίνεται. Εάν και οι δύο συγκρινόμενοι είναι ενήμεροι και έχουν διαφορετικά χαρακτηριστικάtzinfo, η σύγκριση ενεργεί σαν να είχαν πρώτα μετατραπεί σε αδαή UTC datetimes με την εξαίρεση ότι η υλοποίηση δεν υπερχειλίζει ποτέ.
Άλλαξε στην έκδοση 3.3: Οι συγκρίσεις ισότητας μεταξύ ενήμερων και αδαών αντικειμένων datetime δεν κάνουν raise TypeError.
Άλλαξε στην έκδοση 3.13: Η σύγκριση μεταξύ ενός αντικειμένου datetime και ενός στιγμιοτύπου της υποκλάσης date που δεν είναι υποκλάση του datetime δεν μετατρέπει πλέον το τελευταίο σε date, αγνοώντας το μέρος χρόνου και τη ζώνη ώρας. Η προεπιλεγμένη συμπεριφορά μπορεί να αλλάξει με την υπερκάλυψη των ειδικών μεθόδων σύγκρισης σε υποκλάσεις.
Μέθοδοι στιγμιοτύπου:
- datetime.time()¶
Επιστρέφει αντικείμενο
timeμε την ίδια ώρα, λεπτό, δευτερόλεπτο, μικροδευτερόλεπτο και παραμόρφωση του χρόνου. ΤοtzinfoείναιNone. Δείτε επίσης τη μέθοδοtimetz().Άλλαξε στην έκδοση 3.6: Η τιμή παραμόρφωσης αντιγράφεται στο επιστρεφόμενο αντικείμενο
time.
- datetime.timetz()¶
Επιστρέφει αντικείμενο
timeμε την ίδια ώρα, λεπτό, δευτερόλεπτο, μικροδευτερόλεπτο, παραμόρφωση του χρόνου και χαρακτηριστικά tzinfo. Δείτε επίσης τη μέθοδοtime().Άλλαξε στην έκδοση 3.6: Η τιμή παραμόρφωσης αντιγράφεται στο επιστρεφόμενο αντικείμενο
time.
- datetime.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)¶
Επιστρέφει ένα νέο αντικείμενο
datetimeμε τα ίδια χαρακτηριστικά, αλλά με τις καθορισμένες παραμέτρους ενημερωμένες. Σημειώστε ότι μπορεί να καθοριστείtzinfo=Noneγια να δημιουργήσει ένα αδαές datetime από ένα ενήμερο datetime χωρίς μετατροπή των ημερομηνιών και των χρονικών δεδομένων.Τα αντικείμενα
datetimeυποστηρίζονται επίσης από τη γενική συνάρτησηcopy.replace().Άλλαξε στην έκδοση 3.6: Προστέθηκε η παράμετρος fold.
- datetime.astimezone(tz=None)¶
Επιστρέφει ένα αντικείμενο
datetimeμε νέο χαρακτηριστικόtzinfotz, προσαρμόζοντας τα ημερολογιακά και χρονικά δεδομένα έτσι ώστε το αποτέλεσμα να είναι η ίδια ώρα UTC όπως self, αλλά στην τοπική ώρα του tz.Εάν παρέχεται, το tz πρέπει να είναι ένα αντικείμενο της υποκλάσης
tzinfo, και οι μέθοδοιutcoffset()καιdst()δεν πρέπει να επιστρέφουνNone. Εάν το self είναι αδαές, θεωρείται ότι αναπαριστά την ώρα στην τοπική ζώνη ώρας του συστήματος.Εάν κληθεί χωρίς ορίσματα (ή με
tz=None) θεωρείται ότι η τοπική ζώνη ώρας του συστήματος είναι η στόχος ζώνη ώρας. Το χαρακτηριστικό.tzinfoτου μετατραπέντος αντικειμένου datetime θα οριστεί σε ένα αντικείμενο της κλάσηςtimezoneμε το όνομα ζώνης και την απόκλιση που αποκτήθηκαν από το λειτουργικό σύστημα.Εάν
self.tzinfoείναι tz, τότεself.astimezone(tz)είναι ίσο με το self: χωρίς προσαρμογή των ημερομηνιών ή των χρονικών δεδομένων. Διαφορετικά, το αποτέλεσμα είναι η τοπική ώρα στη ζώνη ώρας tz, αναπαριστώντας την ίδια ώρα UTC όπως το self: μετά ταastz = dt.astimezone(tz),astz - astz.utcoffset()θα έχουν τα ίδια ημερομηνιακά και χρονικά δεδομένα όπως τοdt - dt.utcoffset().Εάν απλώς θέλετε να επισυνάψετε ένα αντικείμενο
timezonetz σε ένα datetime dt χωρίς προσαρμογή των ημερομηνιών και των χρονικών δεδομένων, χρησιμοποιήστεdt.replace(tzinfo=tz). Εάν απλώς θέλετε να αφαιρέσετε το αντικείμενοtimezoneαπό ένα ενήμερο datetime dt χωρίς μετατροπή των ημερομηνιών και των χρονικών δεδομένων, χρησιμοποιήστεdt.replace(tzinfo=None).Σημειώστε ότι η προεπιλεγμένη μέθοδος
tzinfo.fromutc()μπορεί να υπερκαλύπτεται σε μια υποκλάσηtzinfoγια να επηρεάσει το αποτέλεσμα που επιστρέφεται από τη μέθοδοastimezone(). Αγνοώντας περιπτώσεις σφάλματος, ηastimezone()λειτουργεί όπως:def astimezone(self, tz): if self.tzinfo is tz: return self # Convert self to UTC, and attach the new timezone object. utc = (self - self.utcoffset()).replace(tzinfo=tz) # Convert from UTC to tz's local time. return tz.fromutc(utc)
Άλλαξε στην έκδοση 3.3: Το tz μπορεί τώρα να παραλειφθεί.
Άλλαξε στην έκδοση 3.6: Η μέθοδος
astimezone()μπορεί τώρα να κληθεί σε αδαή αντικείμενα που θεωρούνται ότι αναπαριστούν την τοπική ώρα του συστήματος.
- datetime.utcoffset()¶
Εάν το
tzinfoείναιNone, επιστρέφειNone, αλλιώς επιστρέφειself.tzinfo.utcoffset(self)και κάνει raise μια εξαίρεση εάν το τελευταίο δεν επιστρέφειNoneή ένα αντικείμενοtimedeltaμε μέγεθος μικρότερο από μια ημέρα.Άλλαξε στην έκδοση 3.7: Η απόκλιση UTC δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
- datetime.dst()¶
Εάν το
tzinfoείναιNone, επιστρέφειNone, αλλιώς επιστρέφειself.tzinfo.dst(self)και κάνει raise μια εξαίρεση εάν το τελευταίο δεν επιστρέφειNoneή ένα αντικείμενοtimedeltaμε μέγεθος μικρότερο από μια ημέρα.Άλλαξε στην έκδοση 3.7: Η απόκλιση DST δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
- datetime.tzname()¶
Εάν το
tzinfoείναιNone, επιστρέφειNone, αλλιώς επιστρέφειself.tzinfo.tzname(self), κάνει raise μια εξαίρεση εάν το τελευταίο δεν επιστρέφειNoneή ένα αντικείμενο string,
- datetime.timetuple()¶
Επιστρέφει μια
time.struct_timeόπως επιστρέφεται από τηνtime.localtime().Το
d.timetuple()είναι ισοδύναμο με:time.struct_time((d.year, d.month, d.day, d.hour, d.minute, d.second, d.weekday(), yday, dst))
όπου
yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1είναι ο αριθμός της ημέρας μέσα στο τρέχον έτος ξεκινώντας από 1 για την 1η Ιανουαρίου. Το χαρακτηριστικόtm_isdstτου αποτελέσματος ορίζεται σύμφωνα με τη μέθοδοdst(): εάνtzinfoείναιNoneή εάν ηdst()επιστρέφειNone, τότε τοtm_isdstορίζεται σε- 1; αλλιώς, εάν ηdst()επιστρέφει μια μη μηδενική τιμή, τότεtm_isdstορίζεται σε 1; αλλιώς, τοtm_isdstορίζεται σε 0.
- datetime.utctimetuple()¶
Εάν το στιγμιότυπο
datetimedείναι αδαές, αυτό είναι το ίδιο με τοd.timetuple()εκτός αν τοtm_isdstορίζεται σε 0 ανεξάρτητα από το τι επιστρέφει ηd.dst(). Η θερινή ώρα δεν ισχύει ποτέ για μια ώρα UTC.Εάν το
dείναι ενήμερο, τοdκανονικοποιείται σε ώρα UTC, αφαιρώντας τοd.utcoffset(), και μιαtime.struct_timeγια την κανονικοποιημένη ώρα επιστρέφεται. Τοtm_isdstορίζεται σε 0. Σημειώστε ότι μπορεί να γίνει raise μιαOverflowErrorεάν τοd.yearήτανMINYEARήMAXYEARκαι η προσαρμογή UTC υπερβαίνει ένα όριο έτους.Προειδοποίηση
Επειδή τα αδαή αντικείμενα
datetimeαντιμετωπίζονται από πολλές μεθόδουςdatetimeως τοπικές ώρες, προτιμάται η χρήση ενήμερων datetimes για την αναπαράσταση ωρών σε UTC∙ ως αποτέλεσμα, η χρήση τηςdatetime.utctimetuple()μπορεί να δώσει παραπλανητικά αποτελέσματα. Εάν έχετε ένα αδαέςdatetimeπου αναπαριστά την ώρα σε UTC, χρησιμοποιήστεdatetime.replace(tzinfo=timezone.utc)για να το κάνετε ενήμερο, οπότε μπορείτε να χρησιμοποιήσετε τη μέθοδοdatetime.timetuple().
- datetime.toordinal()¶
Επιστρέφει τον προληπτικό Γρηγοριανό αριθμό της ημερομηνίας. Το ίδιο με το
self.date().toordinal().
- datetime.timestamp()¶
Επιστρέφει το χρονικό σήμα POSIX που αντιστοιχεί στο στιγμιότυπο
datetime. Η επιστρεφόμενη τιμή είναι έναfloatπαρόμοιο με αυτό που επιστρέφεται από τη συνάρτησηtime.time().Τα αδαή στιγμιότυπα
datetimeθεωρούνται ότι αναπαριστούν την τοπική ώρα και αυτή η μέθοδος βασίζεται στη λειτουργίαmktime()της C για να πραγματοποιήσει τη μετατροπή. Δεδομένου ότι τοdatetimeυποστηρίζει ευρύτερο εύρος τιμών από τηmktime()σε πολλές πλατφόρμες, αυτή η μέθοδος μπορεί να κάνει raiseOverflowErrorήOSErrorγια ώρες πολύ παλιές ή πολύ μελλοντικές.Για τα ενήμερα στιγμιότυπα
datetime, η επιστρεφόμενη τιμή υπολογίζεται ως:(dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
Added in version 3.3.
Άλλαξε στην έκδοση 3.6: Η μέθοδος
timestamp()χρησιμοποιεί το χαρακτηριστικόfoldγια να διασαφηνίσει τις ώρες κατά τη διάρκεια ενός επαναλαμβανόμενου διαστήματος.Σημείωση
Δεν υπάρχει μέθοδος για να αποκτήσετε το χρονικό σήμα POSIX απευθείας από ένα αδαές στιγμιότυπο
datetimeπου αναπαριστά την ώρα σε UTC. Εάν η εφαρμογή σας χρησιμοποιεί αυτή τη σύμβαση και η ζώνη ώρας του συστήματός σας δεν είναι ρυθμισμένη σε UTC, μπορείτε να αποκτήσετε το χρονικό σήμα POSIX παρέχονταςtzinfo=timezone.utc:timestamp = dt.replace(tzinfo=timezone.utc).timestamp()
ή με τον υπολογισμό του χρονικού σήματος απευθείας:
timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)
- datetime.weekday()¶
Επιστρέφει την ημέρα της εβδομάδας ως ακέραιο, όπου η Δευτέρα είναι 0 και η Κυριακή είναι 6. Το ίδιο με το
self.date().weekday(). Δείτε επίσηςisoweekday().
- datetime.isoweekday()¶
Επιστρέφει την ημέρα της εβδομάδας ως ακέραιο, όπου η Δευτέρα είναι 1 και η Κυριακή είναι 7. Το ίδιο με το
self.date().isoweekday(). Δείτε επίσηςweekday(),isocalendar().
- datetime.isocalendar()¶
Επιστρέφει ένα named tuple με τρία συστατικά:
year,weekκαιweekday. Το ίδιο με τοself.date().isocalendar().
- datetime.isoformat(sep='T', timespec='auto')¶
Επιστρέφει μια συμβολοσειρά που αναπαριστά την ημερομηνία και ώρα σε μορφή ISO 8601:
YYYY-MM-DDTHH:MM:SS.ffffff, εάν τοmicrosecondδεν είναι 0YYYY-MM-DDTHH:MM:SS, εάν τοmicrosecondείναι 0
Εάν η
utcoffset()δεν επιστρέψειNone, προστίθεται μια συμβολοσειρά που δίνει την απόκλιση UTC:YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]], εάν τοmicrosecondδεν είναι 0YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]], εάν τοmicrosecondείναι 0
Παραδείγματα:
>>> from datetime import datetime, timezone >>> datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat() '2019-05-18T15:17:08.132263' >>> datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat() '2019-05-18T15:17:00+00:00'
Το προαιρετικό όρισμα sep (προεπιλογή
'T') είναι ένας χαρακτήρας διαχωρισμού, τοποθετημένος μεταξύ των τμημάτων ημερομηνίας και ώρας του αποτελέσματος. Για παράδειγμα:>>> from datetime import tzinfo, timedelta, datetime >>> class TZ(tzinfo): ... """A time zone with an arbitrary, constant -06:39 offset.""" ... def utcoffset(self, dt): ... return timedelta(hours=-6, minutes=-39) ... >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ') '2002-12-25 00:00:00-06:39' >>> datetime(2009, 11, 27, microsecond=100, tzinfo=TZ()).isoformat() '2009-11-27T00:00:00.000100-06:39'
Η προαιρετική παράμετρος timespec καθορίζει τον αριθμό των επιπλέον στοιχείων της ώρας που θα συμπεριληφθούν (η προεπιλογή είναι
'auto'). Μπορεί να είναι ένα από τα εξής:'auto': Το ίδιο με'seconds'εάν τοmicrosecondείναι 0, διαφορετικά το ίδιο με'microseconds'.'hours': Συμπεριλαμβάνει τηνhourσε μορφή δύο ψηφίωνHH.'minutes': Συμπεριλαμβάνει τηνhourκαι τηνminuteσε μορφήHH:MM.'seconds': Συμπεριλαμβάνει τηνhour, τηνminuteκαι τηνsecondσε μορφήHH:MM:SS.'milliseconds': Συμπεριλαμβάνει πλήρη ώρα, αλλά κόβει το κλασματικό μέρος του δευτερολέπτου σε χιλιοστά του δευτερολέπτου.'microseconds': Συμπεριλαμβάνει πλήρη ώρα σε μορφήHH:MM:SS.ffffff.
Σημείωση
Τα εξαιρούμενα στοιχεία ώρας κόβονται, δεν στρογγυλοποιούνται.
Η
ValueErrorθα γίνει raise σε μη έγκυρο όρισμα timespec:>>> from datetime import datetime >>> datetime.now().isoformat(timespec='minutes') '2002-12-25T00:00' >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0) >>> dt.isoformat(timespec='microseconds') '2015-01-01T12:30:59.000000'
Άλλαξε στην έκδοση 3.6: Προστέθηκε η παράμετρος timespec.
- datetime.__str__()¶
Για ένα στιγμιότυπο
datetimed, τοstr(d)είναι ισοδύναμο με τοd.isoformat(' ').
- datetime.ctime()¶
Επιστρέφει μια συμβολοσειρά που αναπαριστά την ημερομηνία και ώρα:
>>> from datetime import datetime >>> datetime(2002, 12, 4, 20, 30, 40).ctime() 'Wed Dec 4 20:30:40 2002'
Η συμβολοσειρά εξόδου δεν θα περιλαμβάνει πληροφορίες ζώνης ώρας, ανεξάρτητα από το αν η είσοδος είναι ενήμερη ή αδαής.
Το
d.ctime()είναι ισοδύναμο με:time.ctime(time.mktime(d.timetuple()))
σε πλατφόρμες όπου η εγγενής συνάρτηση
ctime()της C (την οποία καλεί ηtime.ctime(), αλλά την οποία δεν καλεί ηdatetime.ctime()) συμμορφώνεται με το πρότυπο C.
- datetime.strftime(format)¶
Επιστρέφει μια συμβολοσειρά που αναπαριστά την ημερομηνία και ώρα, ελεγχόμενη από μια ρητή μορφή συμβολοσειράς. Δείτε επίσης Η συμπεριφορά των strftime() και strptime() και
datetime.isoformat().
- datetime.__format__(format)¶
Παρόμοια με τη μέθοδο
datetime.strftime(). Αυτό καθιστά δυνατό τον καθορισμό μιας μορφής συμβολοσειράς για ένα αντικείμενοdatetimeσε formatted string literals και κατά τη χρήση τηςstr.format(). Δείτε επίσης Η συμπεριφορά των strftime() και strptime() καιdatetime.isoformat().
Παραδείγματα Χρήσης: datetime¶
Παραδείγματα εργασίας με αντικείμενα datetime:
>>> from datetime import datetime, date, time, timezone
>>> # Using datetime.combine()
>>> d = date(2005, 7, 14)
>>> t = time(12, 30)
>>> datetime.combine(d, t)
datetime.datetime(2005, 7, 14, 12, 30)
>>> # Using datetime.now()
>>> datetime.now()
datetime.datetime(2007, 12, 6, 16, 29, 43, 79043) # GMT +1
>>> datetime.now(timezone.utc)
datetime.datetime(2007, 12, 6, 15, 29, 43, 79060, tzinfo=datetime.timezone.utc)
>>> # Using datetime.strptime()
>>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
>>> dt
datetime.datetime(2006, 11, 21, 16, 30)
>>> # Using datetime.timetuple() to get tuple of all attributes
>>> tt = dt.timetuple()
>>> for it in tt:
... print(it)
...
2006 # year
11 # month
21 # day
16 # hour
30 # minute
0 # second
1 # weekday (0 = Monday)
325 # number of days since 1st January
-1 # dst - method tzinfo.dst() returned None
>>> # Date in ISO format
>>> ic = dt.isocalendar()
>>> for it in ic:
... print(it)
...
2006 # ISO year
47 # ISO week
2 # ISO weekday
>>> # Formatting a datetime
>>> dt.strftime("%A, %d. %B %Y %I:%M%p")
'Tuesday, 21. November 2006 04:30PM'
>>> 'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
'The day is 21, the month is November, the time is 04:30PM.'
Το παρακάτω παράδειγμα ορίζει μια υποκλάση tzinfo που λαμβάνει τις πληροφορίες για ζώνη ώρας για την Καμπούλ, στο Αφγανιστάν, η οποία χρησιμοποιούσε +4 UTC μέχρι το 1945 και στη συνέχεια +4:30 UTC από τότε:
from datetime import timedelta, datetime, tzinfo, timezone
class KabulTz(tzinfo):
# Kabul used +4 until 1945, when they moved to +4:30
UTC_MOVE_DATE = datetime(1944, 12, 31, 20, tzinfo=timezone.utc)
def utcoffset(self, dt):
if dt.year < 1945:
return timedelta(hours=4)
elif (1945, 1, 1, 0, 0) <= dt.timetuple()[:5] < (1945, 1, 1, 0, 30):
# An ambiguous ("imaginary") half-hour range representing
# a 'fold' in time due to the shift from +4 to +4:30.
# If dt falls in the imaginary range, use fold to decide how
# to resolve. See PEP495.
return timedelta(hours=4, minutes=(30 if dt.fold else 0))
else:
return timedelta(hours=4, minutes=30)
def fromutc(self, dt):
# Follow same validations as in datetime.tzinfo
if not isinstance(dt, datetime):
raise TypeError("fromutc() requires a datetime argument")
if dt.tzinfo is not self:
raise ValueError("dt.tzinfo is not self")
# A custom implementation is required for fromutc as
# the input to this function is a datetime with utc values
# but with a tzinfo set to self.
# See datetime.astimezone or fromtimestamp.
if dt.replace(tzinfo=timezone.utc) >= self.UTC_MOVE_DATE:
return dt + timedelta(hours=4, minutes=30)
else:
return dt + timedelta(hours=4)
def dst(self, dt):
# Kabul does not observe daylight saving time.
return timedelta(0)
def tzname(self, dt):
if dt >= self.UTC_MOVE_DATE:
return "+04:30"
return "+04"
Χρήση του KabulTz από το παραπάνω παράδειγμα:
>>> tz1 = KabulTz()
>>> # Datetime before the change
>>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
>>> print(dt1.utcoffset())
4:00:00
>>> # Datetime after the change
>>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
>>> print(dt2.utcoffset())
4:30:00
>>> # Convert datetime to another time zone
>>> dt3 = dt2.astimezone(timezone.utc)
>>> dt3
datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
>>> dt2
datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz())
>>> dt2 == dt3
True
Αντικείμενα time¶
Ένα αντικείμενο time αναπαριστά μια (τοπική) ώρα της ημέρας, ανεξάρτητη από οποιαδήποτε ημέρα, και υπόκειται σε προσαρμογή μέσω ενός αντικειμένου tzinfo.
- class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)¶
Όλα τα ορίσματα είναι προαιρετικά. Το tzinfo μπορεί να είναι
None, ή ένα στιγμιότυπο μιας υποκλάσηςtzinfo. Τα υπόλοιπα ορίσματα πρέπει να είναι ακέραιοι στα ακόλουθα εύρη:0 <= hour < 24,0 <= minute < 60,0 <= second < 60,0 <= microsecond < 1000000,fold in [0, 1].
Εάν δοθεί ένα όρισμα εκτός αυτών των ευρών, γίνεται raise
ValueError. Όλες οι προεπιλογές είναι 0 εκτός από το tzinfo, το οποίο προεπιλέγεται σεNone.
Χαρακτηριστικά Κλάσης:
- time.resolution¶
Η μικρότερη δυνατή διαφορά μεταξύ μη ίσων αντικειμένων
time,timedelta(microseconds=1), αν και σημειώστε ότι η αριθμητική σε αντικείμεναtimeδεν υποστηρίζεται.
Χαρακτηριστικά στιγμιοτύπου (μόνο για ανάγνωση):
- time.hour¶
Στο
range(24).
- time.minute¶
Στο
range(60).
- time.second¶
Στο
range(60).
- time.microsecond¶
Στο
range(1000000).
- time.tzinfo¶
Το αντικείμενο που δόθηκε ως όρισμα tzinfo στον κατασκευαστή
time, ήNoneεάν δεν δόθηκε κανένα.
- time.fold¶
Στο
[0, 1]. Χρησιμοποιείται για την αποσαφήνιση των τοπικών ωρών σε επαναλαμβανόμενο διάστημα. (Ένα επαναλαμβανόμενο διάστημα συμβαίνει όταν τα ρολόγια γυρίζουν πίσω στο τέλος της θερινής ώρας ή όταν οι αποκλίσεις UTC για την τρέχουσα ζώνη μειώνεται για πολιτικούς λόγους.) Οι τιμές 0 και 1 αντιπροσωπεύουν, αντίστοιχα, την πρώτη και τη δεύτερη από τις δύο χρονικές στιγμές με την ίδια αναπαράσταση τοπικής ώρας.Added in version 3.6.
Τα αντικείμενα time υποστηρίζουν συγκρίσεις ισότητας και τάξης, όπου το a θεωρείται μικρότερο από το b όταν το a προηγείται του b στον χρόνο.
Αδαείς και ενήμερα αντικείμενα time δεν είναι ποτέ ίσα. Η σύγκριση τάξης μεταξύ αδαών και ενήμερων αντικειμένων time προκαλεί TypeError.
Εάν και τα δύο συγκρινόμενα αντικείμενα είναι ενήμερα, και έχουν το ίδιο χαρακτηριστικό tzinfo, τα χαρακτηριστικά tzinfo και fold αγνοούνται και η βάση των ωρών συγκρίνεται. Εάν και τα δύο συγκρινόμενα αντικείμενα είναι ενήμερα και έχουν διαφορετικά χαρακτηριστικά tzinfo, τα συγκρινόμενα αντικείμενα προσαρμόζονται πρώτα αφαιρώντας τις UTC μετατοπίσεις τους (που αποκτώνται από self.utcoffset()).
Άλλαξε στην έκδοση 3.3: Οι συγκρίσεις ισότητας μεταξύ ενήμερων και αδαών στιγμιοτύπων time δεν κάνουν raise TypeError.
Σε λογικά συμφραζόμενα, ένα αντικείμενο time θεωρείται πάντα αληθές.
Άλλαξε στην έκδοση 3.5: Πριν από την Python 3.5, ένα αντικείμενο time θεωρούνταν ψευδές εάν αναπαριστούσε μεσάνυχτα σε UTC. Αυτή η συμπεριφορά θεωρήθηκε ασαφής και επιρρεπής σε σφάλματα και έχει αφαιρεθεί στην Python 3.5. Δείτε bpo-13936 για πλήρεις λεπτομέρειες.
Άλλοι κατασκευαστές:
- classmethod time.fromisoformat(time_string)¶
Επιστρέφει μια
timeπου αντιστοιχεί σε ένα time_string σε οποιαδήποτε έγκυρη μορφή ISO 8601, με τις ακόλουθες εξαιρέσεις:Οι αποκλίσεις ζώνης ώρας μπορεί να έχουν κλασματικά δευτερόλεπτα.
Το αρχικό
T, που απαιτείται κανονικά σε περιπτώσεις όπου μπορεί να υπάρχει αμφιβολία μεταξύ μιας ημερομηνίας και μιας ώρας, δεν απαιτείται.Τα κλασματικά δευτερόλεπτα μπορούν να έχουν οποιονδήποτε αριθμό ψηφίων (οτιδήποτε πέρα από 6 θα κοπεί).
Οι κλασματικές ώρες και λεπτά δεν υποστηρίζονται.
Παραδείγματα:
>>> from datetime import time >>> time.fromisoformat('04:23:01') datetime.time(4, 23, 1) >>> time.fromisoformat('T04:23:01') datetime.time(4, 23, 1) >>> time.fromisoformat('T042301') datetime.time(4, 23, 1) >>> time.fromisoformat('04:23:01.000384') datetime.time(4, 23, 1, 384) >>> time.fromisoformat('04:23:01,000384') datetime.time(4, 23, 1, 384) >>> time.fromisoformat('04:23:01+04:00') datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400))) >>> time.fromisoformat('04:23:01Z') datetime.time(4, 23, 1, tzinfo=datetime.timezone.utc) >>> time.fromisoformat('04:23:01+00:00') datetime.time(4, 23, 1, tzinfo=datetime.timezone.utc)
Added in version 3.7.
Άλλαξε στην έκδοση 3.11: Προηγουμένως, αυτή η μέθοδος υποστήριζε μόνο μορφές που θα μπορούσαν να εκδοθούν από τη
time.isoformat().
- classmethod time.strptime(date_string, format)¶
Επιστρέφει μια
timeπου αντιστοιχεί στο date_string, αναλυμένο σύμφωνα με το format.Εάν το format δεν περιλαμβάνει μικροδευτερόλεπτα ή πληροφορίες ζώνης ώρας, αυτό είναι ισοδύναμο με:
time(*(time.strptime(date_string, format)[3:6]))
Μια
ValueErrorθα γίνει raise αν το date_string και το format δεν μπορούν να αναλυθούν από τηνtime.strptime()ή αν επιστρέφει μια τιμή που δεν είναι τουλάχιστον μια πλειάδα ώρας. Δείτε επίσης Η συμπεριφορά των strftime() και strptime() καιtime.fromisoformat().Added in version 3.14.
Μέθοδοι στιγμιοτύπου:
- time.replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)¶
Επιστρέφει μια νέα
timeμε τις ίδιες τιμές, αλλά με τις καθορισμένες παραμέτρους ενημερωμένες. Σημειώστε ότι τοtzinfo=Noneμπορεί να καθοριστεί για να δημιουργήσει μια αδαήςtimeαπό μια ενήμερηtime, χωρίς μετατροπή των δεδομένων ώρας.Η
timeυποστηρίζεται επίσης από τη γενική συνάρτησηcopy.replace().Άλλαξε στην έκδοση 3.6: Προστέθηκε η παράμετρος fold.
- time.isoformat(timespec='auto')¶
Επιστρέφει μια συμβολοσειρά που αναπαριστά την ώρα σε μορφή ISO 8601, μία από τις εξής:
HH:MM:SS.ffffff, αν τοmicrosecondδεν είναι 0HH:MM:SS, αν τοmicrosecondείναι 0HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]], εάν ηutcoffset()δεν επιστρέφειNoneHH:MM:SS+HH:MM[:SS[.ffffff]], αν τοmicrosecondείναι 0 και τοutcoffset()δεν επιστρέφειNone
Η προαιρετική παράμετρος timespec καθορίζει τον αριθμό των επιπλέον στοιχείων της ώρας που θα συμπεριληφθούν (η προεπιλογή είναι
'auto'). Μπορεί να είναι ένα από τα εξής:'auto': Το ίδιο με'seconds'εάν τοmicrosecondείναι 0, διαφορετικά το ίδιο με'microseconds'.'hours': Συμπεριλαμβάνει τηνhourσε μορφή δύο ψηφίωνHH.'minutes': Συμπεριλαμβάνει τηνhourκαι τηνminuteσε μορφήHH:MM.'seconds': Συμπεριλαμβάνει τηνhour, τηνminuteκαι τηνsecondσε μορφήHH:MM:SS.'milliseconds': Συμπεριλαμβάνει πλήρη ώρα, αλλά κόβει το κλασματικό μέρος του δευτερολέπτου σε χιλιοστά του δευτερολέπτου.'microseconds': Συμπεριλαμβάνει πλήρη ώρα σε μορφήHH:MM:SS.ffffff.
Σημείωση
Τα εξαιρούμενα στοιχεία ώρας κόβονται, δεν στρογγυλοποιούνται.
Μια
ValueErrorθα γίνει raise για μια μη έγκυρη παράμετρο timespec.Παράδειγμα:
>>> from datetime import time >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes') '12:34' >>> dt = time(hour=12, minute=34, second=56, microsecond=0) >>> dt.isoformat(timespec='microseconds') '12:34:56.000000' >>> dt.isoformat(timespec='auto') '12:34:56'
Άλλαξε στην έκδοση 3.6: Προστέθηκε η παράμετρος timespec.
- time.__str__()¶
Για μια ώρα
t, τοstr(t)είναι ισοδύναμο με τοt.isoformat().
- time.strftime(format)¶
Επιστρέφει μια συμβολοσειρά που αναπαριστά την ώρα, ελεγχόμενη από μια ρητή συμβολοσειρά μορφοποίησης. Δείτε επίσης Η συμπεριφορά των strftime() και strptime() και
time.isoformat().
- time.__format__(format)¶
Ίδιο με την
time.strftime(). Αυτό καθιστά δυνατό τον ορισμό μιας συμβολοσειράς μορφοποίησης για ένα αντικείμενοtimeσε formatted string literals και κατά τη χρήση της μεθόδουstr.format(). Δείτε επίσης Η συμπεριφορά των strftime() και strptime() καιtime.isoformat().
- time.utcoffset()¶
Εάν το
tzinfoείναιNone, επιστρέφειNone, διαφορετικά επιστρέφειself.tzinfo.utcoffset(None), και κάνει raise μια εξαίρεση εάν το τελευταίο δεν επιστρέφειNoneή ένα αντικείμενοtimedeltaμε μέγεθος μικρότερο από μια ημέρα.Άλλαξε στην έκδοση 3.7: Η απόκλιση UTC δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
- time.dst()¶
Εάν το
tzinfoείναιNone, επιστρέφειNone, αλλιώς επιστρέφειself.tzinfo.dst(None), και κάνει raise μια εξαίρεση εάν το τελευταίο δεν επιστρέφειNone, ή ένα αντικείμενοtimedeltaμε μέγεθος μικρότερο από μια ήμερα.Άλλαξε στην έκδοση 3.7: Η απόκλιση DST δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
- time.tzname()¶
Εάν το
tzinfoείναιNone, επιστρέφειNone, αλλιώς επιστρέφειself.tzinfo.tzname(None), ή κάνει raise μια εξαίρεση εάν το τελευταίο δεν επιστρέφειNoneή ένα αντικείμενο συμβολοσειράς.
Παραδείγματα Χρήσης: time¶
Παραδείγματα εργασίας με ένα αντικείμενο time:
>>> from datetime import time, tzinfo, timedelta
>>> class TZ1(tzinfo):
... def utcoffset(self, dt):
... return timedelta(hours=1)
... def dst(self, dt):
... return timedelta(0)
... def tzname(self,dt):
... return "+01:00"
... def __repr__(self):
... return f"{self.__class__.__name__}()"
...
>>> t = time(12, 10, 30, tzinfo=TZ1())
>>> t
datetime.time(12, 10, 30, tzinfo=TZ1())
>>> t.isoformat()
'12:10:30+01:00'
>>> t.dst()
datetime.timedelta(0)
>>> t.tzname()
'+01:00'
>>> t.strftime("%H:%M:%S %Z")
'12:10:30 +01:00'
>>> 'The {} is {:%H:%M}.'.format("time", t)
'The time is 12:10.'
Αντικείμενα tzinfo¶
- class datetime.tzinfo¶
Αυτό είναι μια αφηρημένη βασική κλάση, πράγμα που σημαίνει ότι αυτή η κλάση δεν πρέπει να δημιουργείται άμεσα. Ορίζει μια υποκλάση της
tzinfoγια να καταγράψει πληροφορίες σχετικά με μια συγκεκριμένη ζώνη ώρας.Ένα στιγμιότυπο (μια συγκεκριμένη υποκλάση της)
tzinfoμπορεί να περαστεί στους κατασκευαστές των αντικειμένωνdatetimeκαιtime. Τα τελευταία αντικείμενα βλέπουν τα χαρακτηριστικά τους ως τοπική ώρα, και το αντικείμενοtzinfoυποστηρίζει μεθόδους που αποκαλύπτουν την απόκλιση της τοπικής ώρας από το UTC, το όνομα της ζώνης ώρας και την απόκλιση DST, όλα σχετικά με ένα αντικείμενο ημερομηνίας ή ώρας που περνά σε αυτά.Θα χρειαστεί να παράγετε μια συγκεκριμένη υποκλάση και (τουλάχιστον) να παρέχετε υλοποιήσεις των μεθόδων
tzinfoπου απαιτούνται από τις μεθόδουςdatetimeπου χρησιμοποιείτε. Η μονάδαdatetimeπαρέχει τηνtimezone, μια απλή συγκεκριμένη υποκλάση τηςtzinfoπου μπορεί να αντιπροσωπεύει ζώνες ώρας με σταθερή απόκλιση από το UTC, όπως το ίδιο το UTC ή το EST της Βόρειας Αμερικής και το EDT.Special requirement for pickling: A
tzinfosubclass must have an__init__()method that can be called with no arguments, otherwise it can be pickled but possibly not unpickled again. This is a technical requirement that may be relaxed in the future.Μια συγκεκριμένη υποκλάση της
tzinfoμπορεί να χρειαστεί να υλοποιήσει τις παρακάτω μεθόδους. Το ποιες μέθοδοι ακριβώς χρειάζονται εξαρτάται από τις χρήσεις που γίνονται σε αντικείμεναdatetimeπου είναι ενήμερα για τη ζώνη ώρας. Εάν έχετε αμφιβολίες, απλά υλοποιήστε τα όλα.
- tzinfo.utcoffset(dt)¶
Επιστρέφει την απόκλιση της τοπικής ώρας από το UTC, ως αντικείμενο
timedeltaπου είναι θετικό ανατολικά του UTC. Εάν η τοπική ώρα είναι δυτικά του UTC, αυτό θα πρέπει να είναι αρνητικό.Αυτό αναπαριστά τη συνολική απόκλιση από το UTC. Για παράδειγμα, εάν ένα αντικείμενο
tzinfoαναπαριστά τόσο τη ζώνη ώρας όσο και τις προσαρμογές DST, ηutcoffset()θα πρέπει να επιστρέφει το άθροισμά τους. Εάν η απόκλιση UTC δεν είναι γνωστή, επιστρέψειNone. Διαφορετικά, η τιμή που επιστρέφεται πρέπει να είναι ένα αντικείμενοtimedeltaαυστηρά μεταξύ-timedelta(hours=24)καιtimedelta(hours=24)(η μεγέθυνση της απόκλισης πρέπει να είναι μικρότερη από μία ημέρα). Οι περισσότερες υλοποιήσεις τηςutcoffset()θα μοιάζουν με μία από τις παρακάτω δύο:return CONSTANT # fixed-offset class return CONSTANT + self.dst(dt) # daylight-aware class
Εάν η
utcoffset()δεν επιστρέφειNone, τότε ούτε ηdst()δεν θα πρέπει να επιστρέφειNone.Η προεπιλεγμένη υλοποίηση της
utcoffset()κάνει raiseNotImplementedError.Άλλαξε στην έκδοση 3.7: Η απόκλιση UTC δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
- tzinfo.dst(dt)¶
Επιστρέφει την προσαρμογή της θερινής ώρας (DST), ως αντικείμενο
timedeltaήNoneεάν οι πληροφορίες για τη θερινή ώρα δεν είναι γνωστές.Επιστρέφει
timedelta(0)εάν το DST δεν είναι σε ισχύ. Εάν το DST είναι σε ισχύ, επιστρέφει την απόκλιση ως αντικείμενοtimedelta(βλ.utcoffset()για λεπτομέρειες). Σημειώστε ότι η απόκλιση DST, εάν ισχύει, έχει ήδη προστεθεί στην απόκλιση UTC που επιστρέφεται από τηνutcoffset(), επομένως δεν υπάρχει ανάγκη να συμβουλευτείτε τηνdst()εκτός αν σας ενδιαφέρει να αποκτήσετε πληροφορίες DST ξεχωριστά. Για παράδειγμα, ηdatetime.timetuple()καλεί τη μέθοδοdst()του χαρακτηριστικούtzinfoγια να καθορίσει πώς θα πρέπει να ρυθμιστεί η σημαίαtm_isdst, και ηtzinfo.fromutc()καλεί τηνdst()για να υπολογίσει για τις αλλαγές DST όταν διασχίζει ζώνες ώρας.Ένα στιγμιότυπο tz μιας υποκλάσης
tzinfoπου μοντελοποιεί τόσο τις κανονικές όσο και τις θερινές ώρες πρέπει να είναι συνεπές σε αυτό το σημείο:tz.utcoffset(dt) - tz.dst(dt)πρέπει να επιστρέφει το ίδιο αποτέλεσμα για κάθε
datetimedt μεdt.tzinfo == tz. Για λογικές υποκλάσειςtzinfo, αυτή η έκφραση δίνει την «κανονική απόκλιση» της ζώνης ώρας, η οποία δεν πρέπει να εξαρτάται από την ημερομηνία ή την ώρα, αλλά μόνο από τη γεωγραφική τοποθεσία. Η υλοποίηση τηςdatetime.astimezone()βασίζεται σε αυτό, αλλά δεν μπορεί να ανιχνεύσει παραβιάσεις· είναι ευθύνη του προγραμματιστή να το διασφαλίσει. Εάν μια υποκλάσηtzinfoδεν μπορεί να το εγγυηθεί, μπορεί να παρακάμψει την προεπιλεγμένη υλοποίηση τηςtzinfo.fromutc()ώστε να λειτουργεί σωστά με τηastimezone()ανεξαρτήτως.Οι περισσότερες υλοποιήσεις της
dst()θα μοιάζουν μάλλον με μία από αυτές τις δύο:def dst(self, dt): # a fixed-offset class: doesn't account for DST return timedelta(0)
ή:
def dst(self, dt): # Code to set dston and dstoff to the time zone's DST # transition times based on the input dt.year, and expressed # in standard local time. if dston <= dt.replace(tzinfo=None) < dstoff: return timedelta(hours=1) else: return timedelta(0)
Η προεπιλεγμένη υλοποίηση της
dst()κάνει raiseNotImplementedError.Άλλαξε στην έκδοση 3.7: Η απόκλιση DST δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
- tzinfo.tzname(dt)¶
Επιστρέφει το όνομα της ζώνης ώρας που αντιστοιχεί στο αντικείμενο
datetimedt, ως συμβολοσειρά. Τίποτα σχετικά με τα ονόματα συμβολοσειρών δεν ορίζεται από το moduledatetime, και δεν υπάρχει απαίτηση να σημαίνει κάτι συγκεκριμένο. Για παράδειγμα, τα"GMT","UTC","-500","-5:00","EDT","US/Eastern","America/New York"είναι όλα έγκυρες απαντήσεις. ΕπιστρέφειNoneαν δεν είναι γνωστό κάποιο όνομα συμβολοσειράς. Σημειώστε ότι αυτή είναι μέθοδος και όχι σταθερή συμβολοσειρά, κυρίως επειδή κάποιες υποκλάσειςtzinfoμπορεί να θέλουν να επιστρέφουν διαφορετικά ονόματα ανάλογα με την συγκεκριμένη τιμή του dt που δίνεται, ειδικά αν η κλάσηtzinfoλαμβάνει υπόψη τη θερινή ώρα.Η προεπιλεγμένη υλοποίηση της
tzname()κάνει raiseNotImplementedError.
Αυτές οι μέθοδοι καλούνται από ένα αντικείμενο datetime ή time, σε απάντηση στις μεθόδους τους με τα ίδια ονόματα. Ένα αντικείμενο datetime περνά τον εαυτό του ως παράμετρο, και ένα αντικείμενο time περνά None ως παράμετρο. Οι μέθοδοι μιας υποκλάσης tzinfo θα πρέπει επομένως να είναι έτοιμες να αποδεχτούν ένα όρισμα dt που είναι None, ή μία κλάσης datetime.
When None is passed, it’s up to the class designer to decide the best
response. For example, returning None is appropriate if the class wishes to
say that time objects don’t participate in the tzinfo protocols. It
may be more useful for utcoffset(None) to return the standard UTC offset, as
there is no other convention for discovering the standard offset.
Όταν ένα αντικείμενο datetime περνά ως απάντηση σε μια μέθοδο datetime, το dt.tzinfo είναι το ίδιο αντικείμενο με το self. Οι μέθοδοι tzinfo μπορούν να βασίζονται σε αυτό, εκτός αν ο κώδικας του χρήστη καλεί τις μεθόδους tzinfo απευθείας. Η πρόθεση είναι οι μέθοδοι tzinfo να ερμηνεύουν το dt ως τοπικό χρόνο, και να μην χρειάζεται να ανησυχούν για αντικείμενα σε άλλες ζώνες ώρας.
Υπάρχει μια ακόμη μέθοδος tzinfo που μια υποκλάση μπορεί να θέλει να την παρακάμψει:
- tzinfo.fromutc(dt)¶
Αυτό καλείται από την προεπιλεγμένη υλοποίηση της
datetime.astimezone(). Όταν καλείται από αυτήν, τοdt.tzinfoείναι self, και τα δεδομένα ημερομηνίας και ώρας του dt πρέπει να θεωρούνται ότι εκφράζουν μια ώρα UTC. Ο σκοπός τηςfromutc()είναι να προσαρμόσει τα δεδομένα ημερομηνίας και ώρας, επιστρέφοντας ένα ισοδύναμο αντικείμενο ημερομηνίας και ώρας στην τοπική ώρα του self.Οι περισσότερες υποκλάσεις
tzinfoθα πρέπει να μπορούν να κληρονομήσουν την προεπιλεγμένη υλοποίηση τηςfromutc()χωρίς προβλήματα. Είναι αρκετά ισχυρή για να χειριστεί ζώνες ώρας με σταθερή απόκλιση, καθώς και ζώνες ώρας που λογαριάζουν τόσο την κανονική όσο και τη θερινή ώρα, και το τελευταίο ακόμη και αν οι χρόνοι μετάβασης της θερινής ώρας διαφέρουν σε διαφορετικά έτη. Ένα παράδειγμα ζώνης ώρας που η προεπιλεγμένη υλοποίηση τηςfromutc()μπορεί να μην χειρίζεται σωστά σε όλες τις περιπτώσεις είναι μια όπου η κανονική απόκλιση (από το UTC) εξαρτάται από την συγκεκριμένη ημερομηνία και ώρα που περνά, κάτι που μπορεί να συμβεί για πολιτικούς λόγους. Οι προεπιλεγμένες υλοποιήσεις τωνastimezone()καιfromutc()μπορεί να μην παράγουν το αποτέλεσμα που θέλετε εάν το αποτέλεσμα είναι μία από τις ώρες που περικλείουν τη στιγμή που αλλάζει η κανονική απόκλιση.Παραλείποντας τον κώδικα για περιπτώσεις σφαλμάτων, η προεπιλεγμένη υλοποίηση της
fromutc()λειτουργεί ως εξής:def fromutc(self, dt): # raise ValueError error if dt.tzinfo is not self dtoff = dt.utcoffset() dtdst = dt.dst() # raise ValueError if dtoff is None or dtdst is None delta = dtoff - dtdst # this is self's standard offset if delta: dt += delta # convert to standard local time dtdst = dt.dst() # raise ValueError if dtdst is None if dtdst: return dt + dtdst else: return dt
Στο παρακάτω αρχείο tzinfo_examples.py υπάρχουν μερικά παραδείγματα κλάσεων tzinfo:
from datetime import tzinfo, timedelta, datetime
ZERO = timedelta(0)
HOUR = timedelta(hours=1)
SECOND = timedelta(seconds=1)
# A class capturing the platform's idea of local time.
# (May result in wrong values on historical times in
# timezones where UTC offset and/or the DST rules had
# changed in the past.)
import time as _time
STDOFFSET = timedelta(seconds = -_time.timezone)
if _time.daylight:
DSTOFFSET = timedelta(seconds = -_time.altzone)
else:
DSTOFFSET = STDOFFSET
DSTDIFF = DSTOFFSET - STDOFFSET
class LocalTimezone(tzinfo):
def fromutc(self, dt):
assert dt.tzinfo is self
stamp = (dt - datetime(1970, 1, 1, tzinfo=self)) // SECOND
args = _time.localtime(stamp)[:6]
dst_diff = DSTDIFF // SECOND
# Detect fold
fold = (args == _time.localtime(stamp - dst_diff))
return datetime(*args, microsecond=dt.microsecond,
tzinfo=self, fold=fold)
def utcoffset(self, dt):
if self._isdst(dt):
return DSTOFFSET
else:
return STDOFFSET
def dst(self, dt):
if self._isdst(dt):
return DSTDIFF
else:
return ZERO
def tzname(self, dt):
return _time.tzname[self._isdst(dt)]
def _isdst(self, dt):
tt = (dt.year, dt.month, dt.day,
dt.hour, dt.minute, dt.second,
dt.weekday(), 0, 0)
stamp = _time.mktime(tt)
tt = _time.localtime(stamp)
return tt.tm_isdst > 0
Local = LocalTimezone()
# A complete implementation of current DST rules for major US time zones.
def first_sunday_on_or_after(dt):
days_to_go = 6 - dt.weekday()
if days_to_go:
dt += timedelta(days_to_go)
return dt
# US DST Rules
#
# This is a simplified (i.e., wrong for a few cases) set of rules for US
# DST start and end times. For a complete and up-to-date set of DST rules
# and timezone definitions, visit the Olson Database (or try pytz):
# http://www.twinsun.com/tz/tz-link.htm
# https://sourceforge.net/projects/pytz/ (might not be up-to-date)
#
# In the US, since 2007, DST starts at 2am (standard time) on the second
# Sunday in March, which is the first Sunday on or after Mar 8.
DSTSTART_2007 = datetime(1, 3, 8, 2)
# and ends at 2am (DST time) on the first Sunday of Nov.
DSTEND_2007 = datetime(1, 11, 1, 2)
# From 1987 to 2006, DST used to start at 2am (standard time) on the first
# Sunday in April and to end at 2am (DST time) on the last
# Sunday of October, which is the first Sunday on or after Oct 25.
DSTSTART_1987_2006 = datetime(1, 4, 1, 2)
DSTEND_1987_2006 = datetime(1, 10, 25, 2)
# From 1967 to 1986, DST used to start at 2am (standard time) on the last
# Sunday in April (the one on or after April 24) and to end at 2am (DST time)
# on the last Sunday of October, which is the first Sunday
# on or after Oct 25.
DSTSTART_1967_1986 = datetime(1, 4, 24, 2)
DSTEND_1967_1986 = DSTEND_1987_2006
def us_dst_range(year):
# Find start and end times for US DST. For years before 1967, return
# start = end for no DST.
if 2006 < year:
dststart, dstend = DSTSTART_2007, DSTEND_2007
elif 1986 < year < 2007:
dststart, dstend = DSTSTART_1987_2006, DSTEND_1987_2006
elif 1966 < year < 1987:
dststart, dstend = DSTSTART_1967_1986, DSTEND_1967_1986
else:
return (datetime(year, 1, 1), ) * 2
start = first_sunday_on_or_after(dststart.replace(year=year))
end = first_sunday_on_or_after(dstend.replace(year=year))
return start, end
class USTimeZone(tzinfo):
def __init__(self, hours, reprname, stdname, dstname):
self.stdoffset = timedelta(hours=hours)
self.reprname = reprname
self.stdname = stdname
self.dstname = dstname
def __repr__(self):
return self.reprname
def tzname(self, dt):
if self.dst(dt):
return self.dstname
else:
return self.stdname
def utcoffset(self, dt):
return self.stdoffset + self.dst(dt)
def dst(self, dt):
if dt is None or dt.tzinfo is None:
# An exception may be sensible here, in one or both cases.
# It depends on how you want to treat them. The default
# fromutc() implementation (called by the default astimezone()
# implementation) passes a datetime with dt.tzinfo is self.
return ZERO
assert dt.tzinfo is self
start, end = us_dst_range(dt.year)
# Can't compare naive to aware objects, so strip the timezone from
# dt first.
dt = dt.replace(tzinfo=None)
if start + HOUR <= dt < end - HOUR:
# DST is in effect.
return HOUR
if end - HOUR <= dt < end:
# Fold (an ambiguous hour): use dt.fold to disambiguate.
return ZERO if dt.fold else HOUR
if start <= dt < start + HOUR:
# Gap (a non-existent hour): reverse the fold rule.
return HOUR if dt.fold else ZERO
# DST is off.
return ZERO
def fromutc(self, dt):
assert dt.tzinfo is self
start, end = us_dst_range(dt.year)
start = start.replace(tzinfo=self)
end = end.replace(tzinfo=self)
std_time = dt + self.stdoffset
dst_time = std_time + HOUR
if end <= dst_time < end + HOUR:
# Repeated hour
return std_time.replace(fold=1)
if std_time < start or dst_time >= end:
# Standard time
return std_time
if start <= std_time < end - HOUR:
# Daylight saving time
return dst_time
Eastern = USTimeZone(-5, "Eastern", "EST", "EDT")
Central = USTimeZone(-6, "Central", "CST", "CDT")
Mountain = USTimeZone(-7, "Mountain", "MST", "MDT")
Pacific = USTimeZone(-8, "Pacific", "PST", "PDT")
Σημειώστε ότι υπάρχουν αναπόφευκτες λεπτές περιπτώσεις δύο φορές το χρόνο σε μια υποκλάση tzinfo που λαμβάνει υπόψη τόσο την κανονική όσο και τη θερινή ώρα, στα σημεία μετάβασης DST. Για να είμαστε συγκεκριμένοι, σκεφτείτε την Ανατολική Ζώνη των ΗΠΑ (UTC -0500), όπου η EDT ξεκινά το λεπτό μετά τις 1:59 (EST) τη δεύτερη Κυριακή του Μαρτίου και τελειώνει το λεπτό μετά τις 1:59 (EDT) την πρώτη Κυριακή του Νοεμβρίου:
UTC 3:MM 4:MM 5:MM 6:MM 7:MM 8:MM
EST 22:MM 23:MM 0:MM 1:MM 2:MM 3:MM
EDT 23:MM 0:MM 1:MM 2:MM 3:MM 4:MM
start 22:MM 23:MM 0:MM 1:MM 3:MM 4:MM
end 23:MM 0:MM 1:MM 1:MM 2:MM 3:MM
Όταν ξεκινάει το DST (η γραμμή «start»), το τοπικό ρολόι πηδάει από 1:59 σε 3:00. Μια τοπική ώρα της μορφής 2:MM δεν έχει νόημα σε αυτή την ημέρα, έτσι η astimezone(Eastern) δεν θα επιστρέψει αποτέλεσμα με hour == 2 την ημέρα που ξεκινάει το DST. Για παράδειγμα, κατά τον μετασχηματισμό Spring forward του 2016, παίρνουμε:
>>> from datetime import datetime, timezone
>>> from tzinfo_examples import HOUR, Eastern
>>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
>>> for i in range(4):
... u = u0 + i*HOUR
... t = u.astimezone(Eastern)
... print(u.time(), 'UTC =', t.time(), t.tzname())
...
05:00:00 UTC = 00:00:00 EST
06:00:00 UTC = 01:00:00 EST
07:00:00 UTC = 03:00:00 EDT
08:00:00 UTC = 04:00:00 EDT
Όταν τελειώνει το DST (η γραμμή «end»), υπάρχει ένα δυνητικά χειρότερο πρόβλημα: υπάρχει μια ώρα που δεν μπορεί να γραφτεί με σαφήνεια στην τοπική ώρα: η τελευταία ώρα της θερινής ώρας. Στην Ανατολική ζώνη, αυτές είναι οι ώρες της μορφής 5:MM UTC την ημέρα που τελειώνει η θερινή ώρα. Το τοπικό ρολόι πηδάει από 1:59 (θερινή ώρα) πίσω σε 1:00 (κανονική ώρα) ξανά. Οι τοπικές ώρες της μορφής 1:MM είναι ασαφείς. Η astimezone() μιμείται τη συμπεριφορά του τοπικού ρολογιού χαρτογραφώντας δύο γειτονικές ώρες UTC στην ίδια τοπική ώρα τότε. Στο παράδειγμα της Ανατολής, οι ώρες UTC της μορφής 5:MM και 6:MM χαρτογραφούνται και οι δύο σε 1:MM όταν μετατραπούν σε Ανατολική, αλλά οι προηγούμενες ώρες έχουν την ιδιότητα fold ρυθμισμένη σε 0 και οι μεταγενέστερες ώρες έχουν ρυθμισμένη σε 1. Για παράδειγμα, κατά τη μετάβαση Fall back του 2016, παίρνουμε:
>>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
>>> for i in range(4):
... u = u0 + i*HOUR
... t = u.astimezone(Eastern)
... print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
...
04:00:00 UTC = 00:00:00 EDT 0
05:00:00 UTC = 01:00:00 EDT 0
06:00:00 UTC = 01:00:00 EST 1
07:00:00 UTC = 02:00:00 EST 0
Σημειώστε ότι τα στιγμιότυπα της datetime όπου διαφέρουν μόνο από την τιμή του χαρακτηριστικού fold θεωρούνται ίσα στις συγκρίσεις.
Εφαρμογές που δεν μπορούν να αντέξουν τις ασαφείς ώρες θα πρέπει να ελέγχουν την τιμή του χαρακτηριστικού fold ή να αποφεύγουν τη χρήση υβριδικών υποκλάσεων tzinfo ∙ δεν υπάρχουν ασαφείς περιπτώσεις όταν χρησιμοποιείται η timezone, ή οποιαδήποτε άλλη υποκλάση tzinfo με σταθερή μετατόπιση (όπως μια κλάση που αντιπροσωπεύει μόνο την EST (σταθερή μετατόπιση -5 ώρες), ή μόνο την EDT (σταθερή μετατόπιση -4 ώρες)).
Δείτε επίσης
zoneinfoΤο module
datetimeέχει μια βασική κλάσηtimezone(για τη διαχείριση αυθαίρετων σταθερών αποκλίσεων από το UTC) και το χαρακτηριστικό τουtimezone.utc(ένα στιγμιότυπο UTC τηςtimezone).Το
zoneinfoφέρνει τη βάση δεδομένων ζωνών ώρας IANA (γνωστή και ως βάση δεδομένων Olson) στην Python, και η χρήση της συνιστάται.
- IANA time zone database
Η Βάση Δεδομένων Ζωνών Ώρας (συχνά αποκαλείται tz, tzdata ή zoneinfo) περιέχει κώδικα και δεδομένα που αντιπροσωπεύουν την ιστορία της τοπικής ώρας για πολλές αντιπροσωπευτικές τοποθεσίες σε όλο τον κόσμο. Ενημερώνεται περιοδικά ώστε να αντικατοπτρίζει τις αλλαγές που γίνονται από πολιτικούς φορείς στα όρια των ζωνών ώρας, στις αποκλίσεις UTC και στους κανόνες θερινής ώρας.
Αντικείμενα timezone¶
Η κλάση timezone είναι μια υποκλάση της tzinfo, κάθε στιγμιότυπο της οποίας αντιπροσωπεύει μια ζώνη ώρας που ορίζεται από μια σταθερή μετατόπιση από το UTC.
Αντικείμενα αυτής της κλάσης δεν μπορούν να χρησιμοποιηθούν για να αναπαραστήσουν πληροφορίες ζώνης ώρας στις τοποθεσίες όπου χρησιμοποιούνται διαφορετικές μετατοπίσεις σε διαφορετικές ημέρες του έτους ή όπου έχουν γίνει ιστορικές αλλαγές στην πολιτική ώρα.
- class datetime.timezone(offset, name=None)¶
Το όρισμα offset πρέπει να καθοριστεί ως ένα αντικείμενο
timedeltaπου αντιπροσωπεύει τη διαφορά μεταξύ της τοπικής ώρας και του UTC. Πρέπει να είναι αυστηρά μεταξύ-timedelta(hours=24)καιtimedelta(hours=24), διαφορετικά θα γίνει raise μιαValueError.Το όρισμα name είναι προαιρετικό. Εάν καθοριστεί, πρέπει να είναι μια συμβολοσειρά που θα χρησιμοποιηθεί ως η τιμή που επιστρέφεται από τη μέθοδο
datetime.tzname().Added in version 3.2.
Άλλαξε στην έκδοση 3.7: Η απόκλιση UTC δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
- timezone.utcoffset(dt)¶
Επιστρέφει την σταθερή τιμή που καθορίστηκε κατά τη δημιουργία του στιγμιότυπου
timezone.Το όρισμα dt αγνοείται. Η επιστρεφόμενη τιμή είναι ένα στιγμιότυπο της
timedeltaπου είναι ίσο με τη διαφορά μεταξύ της τοπικής ώρας και του UTC.Άλλαξε στην έκδοση 3.7: Η απόκλιση UTC δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
- timezone.tzname(dt)¶
Επιστρέφει την σταθερή τιμή που καθορίστηκε κατά τη δημιουργία του στιγμιότυπου
timezone.Εάν το name δεν παρέχεται στον κατασκευαστή, το όνομα που επιστρέφεται από
tzname(dt)παράγεται από την τιμή τουoffsetως εξής. Εάν το offset είναιtimedelta(0), το όνομα είναι «UTC», διαφορετικά είναι μια συμβολοσειρά στη μορφήUTC±HH:MM, όπου ± είναι το πρόσημο τουoffset, HH και MM είναι δύο ψηφία τουoffset.hoursκαιoffset.minutesαντίστοιχα.Άλλαξε στην έκδοση 3.6: Το όνομα που παράγεται από
offset=timedelta(0)είναι τώρα απλώς'UTC', όχι'UTC+00:00'.
- timezone.dst(dt)¶
Πάντα επιστρέφει
None.
- timezone.fromutc(dt)¶
Επιστρέφει
dt + offset. Το όρισμα dt πρέπει να είναι ένα συνειδητό στιγμιότυποdatetime, με τοtzinfoνα έχει οριστεί σεself.
Χαρακτηριστικά Κλάσης:
- timezone.utc¶
Η ζώνη ώρας UTC,
timezone(timedelta(0)).
Η συμπεριφορά των strftime() και strptime()¶
Τα αντικείμενα date, datetime και time υποστηρίζουν όλα μια μέθοδο strftime(format), για να δημιουργήσουν μια συμβολοσειρά που αντιπροσωπεύει την ώρα υπό τον έλεγχο μιας ρητής μορφής συμβολοσειράς.
Αντίστροφα, οι μέθοδοι κλάσης date.strptime(), datetime.strptime() και time.strptime() δημιουργούν ένα αντικείμενο από μια συμβολοσειρά που αντιπροσωπεύει την ώρα και μια αντίστοιχη μορφή συμβολοσειράς.
Ο παρακάτω πίνακας παρέχει μια γενική σύγκριση μεταξύ της strftime() και της strptime():
|
|
|
|---|---|---|
Χρήση |
Μετατροπή αντικειμένου σε συμβολοσειρά σύμφωνα με μια δεδομένη μορφή |
Ανάλυση μιας συμβολοσειράς σε ένα αντικείμενο δεδομένης μορφής |
Τύπος μεθόδου |
Μέθοδος στιγμής |
Μέθοδος κλάσης |
Υπογραφή |
|
|
Οι κωδικοί μορφής strftime() και strptime()¶
Αυτές οι μέθοδοι δέχονται κωδικούς μορφής που μπορούν να χρησιμοποιηθούν για την ανάλυση και τη μορφοποίηση ημερομηνιών:
>>> datetime.strptime('31/01/22 23:59:59.999999',
... '%d/%m/%y %H:%M:%S.%f')
datetime.datetime(2022, 1, 31, 23, 59, 59, 999999)
>>> _.strftime('%a %d %b %Y, %I:%M%p')
'Mon 31 Jan 2022, 11:59PM'
Η ακόλουθη είναι μια λίστα με όλους τους κωδικούς μορφής που απαιτεί το πρότυπο C του 1989, και αυτοί λειτουργούν σε όλες τις πλατφόρμες με μια τυπική υλοποίηση C.
Οδηγία |
Σημασία |
Παράδειγμα |
Σημειώσεις |
|---|---|---|---|
|
Ημέρα της εβδομάδας ως τοπική συντομογραφία. |
Sun, Mon, …, Sat
(en_US);
So, Mo, …, Sa
(de_DE)
|
(1) |
|
Ημέρα της εβδομάδας ως τοπική πλήρης ονομασία. |
Sunday, Monday, …,
Saturday (en_US);
Sonntag, Montag, …,
Samstag (de_DE)
|
(1) |
|
Η ημέρα της εβδομάδας ως δεκαδικός αριθμός, όπου 0 είναι η Κυριακή και 6 είναι το Σάββατο. |
0, 1, …, 6 |
|
|
Ημέρα του μήνα ως μηδενικά-γεμισμένο δεκαδικό νούμερο. |
01, 02, …, 31 |
(9) |
|
Μήνας ως τοπική συντομογραφία. |
Jan, Feb, …, Dec
(en_US);
Jan, Feb, …, Dez
(de_DE)
|
(1) |
|
Μήνας ως τοπική πλήρης ονομασία. |
January, February,
…, December (en_US);
Januar, Februar, …,
Dezember (de_DE)
|
(1) |
|
Μήνας ως μηδενικά-γεμισμένο δεκαδικό νούμερο. |
01, 02, …, 12 |
(9) |
|
Έτος χωρίς αιώνα ως μηδενικά-γεμισμένο δεκαδικό νούμερο. |
00, 01, …, 99 |
(9) |
|
Έτος με αιώνα ως δεκαδικός αριθμός. |
0001, 0002, …, 2013, 2014, …, 9998, 9999 |
(2) |
|
Ώρα (24-ωρο ρολόι) ως μηδενικά-γεμισμένο δεκαδικό νούμερο. |
00, 01, …, 23 |
(9) |
|
Η ώρα (σε μορφή 12-ωρού) ως μηδενικά-γεμισμένο δεκαδικό νούμερο. |
01, 02, …, 12 |
(9) |
|
Τοπικά ισοδύναμο είτε του AM είτε του PM. |
AM, PM (en_US);
am, pm (de_DE)
|
(1), (3) |
|
Λεπτό ως μηδενικά-γεμισμένο δεκαδικό νούμερο. |
00, 01, …, 59 |
(9) |
|
Δευτερόλεπτο ως μηδενικά-γεμισμένο δεκαδικό νούμερο. |
00, 01, …, 59 |
(4), (9) |
|
Μικροδευτερόλεπτο ως δεκαδικό νούμερο, μηδενικά-γεμισμένο σε 6 ψηφία. |
000000, 000001, …, 999999 |
(5) |
|
Διαφορά UTC σε μορφή |
(empty), +0000, -0400, +1030, +063415, -030712.345216 |
(6) |
|
Όνομα ζώνης ώρας (κενή συμβολοσειρά αν το αντικείμενο είναι αδαές). |
(κενό), UTC, GMT |
(6) |
|
Ημέρα του έτους ως μηδενικά-γεμισμένο δεκαδικό νούμερο. |
001, 002, …, 366 |
(9) |
|
Αριθμός εβδομάδας του έτους (Κυριακή ως την πρώτη ημέρα της εβδομάδας) ως μηδενικά-γεμισμένο δεκαδικό νούμερο. Όλες οι ημέρες σε ένα νέο έτος που προηγούνται της πρώτης Κυριακής θεωρούνται ότι είναι στην εβδομάδα 0. |
00, 01, …, 53 |
(7), (9) |
|
Αριθμός εβδομάδας του έτους (Δευτέρα ως την πρώτη ημέρα της εβδομάδας) ως μηδενικά-γεμισμένο δεκαδικό νούμερο. Όλες οι ημέρες σε ένα νέο έτος που προηγούνται της πρώτης Δευτέρας θεωρούνται ότι είναι στην εβδομάδα 0. |
00, 01, …, 53 |
(7), (9) |
|
Το τοπικά κατάλληλο για την αναπαράσταση ημερομηνίας και ώρας. |
Tue Aug 16 21:30:00
1988 (en_US);
Di 16 Aug 21:30:00
1988 (de_DE)
|
(1) |
|
Το τοπικά κατάλληλο για την αναπαράσταση ημερομηνίας. |
08/16/88 (None);
08/16/1988 (en_US);
16.08.1988 (de_DE)
|
(1) |
|
Το τοπικά κατάλληλο για την αναπαράσταση ώρας. |
21:30:00 (en_US);
21:30:00 (de_DE)
|
(1) |
|
Ένας literal χαρακτήρας |
% |
Ορισμένες επιπλέον οδηγίες που δεν απαιτούνται από το πρότυπο C89 περιλαμβάνονται για λόγους ευκολίας. Αυτές οι παράμετροι αντιστοιχούν όλες σε τιμές ημερομηνίας ISO 8601.
Οδηγία |
Σημασία |
Παράδειγμα |
Σημειώσεις |
|---|---|---|---|
|
ISO 8601 έτος με αιώνα που αντιπροσωπεύει το έτος που περιέχει το μεγαλύτερο μέρος της ISO εβδομάδας ( |
0001, 0002, …, 2013, 2014, …, 9998, 9999 |
(8) |
|
ISO 8601 ημέρα της εβδομάδας ως δεκαδικό νούμερο όπου 1 είναι η Δευτέρα. |
1, 2, …, 7 |
|
|
ISO 8601 βδομάδα ως δεκαδικό νούμερο με τη Δευτέρα ως την πρώτη μέρα της εβδομάδας. Η εβδομάδα 01 είναι η εβδομάδα που περιέχει την 4η Ιανουαρίου. |
01, 02, …, 53 |
(8), (9) |
|
UTC διαφορά σε μορφή |
(empty), +00:00, -04:00, +10:30, +06:34:15, -03:07:12.345216 |
(6) |
Αυτές οι παράμετροι ενδέχεται να μην είναι διαθέσιμες σε όλες τις πλατφόρμες όταν χρησιμοποιούνται με τη μέθοδο strftime(). Οι οδηγίες ISO 8601 έτους και ISO 8601 εβδομάδας δεν είναι εναλλάξιμες με τις παραπάνω οδηγίες έτους και αριθμού εβδομάδας. Η κλήση της strptime() με ατελείς ή ασαφείς οδηγίες ISO 8601 θα προκαλέσει την εμφάνιση μιας ValueError.
Το πλήρες σύνολο των κωδικών μορφοποίησης που υποστηρίζονται διαφέρει μεταξύ των πλατφορμών, επειδή η Python καλεί τη λειτουργία strftime() της βιβλιοθήκης C της πλατφόρμας, και οι παραλλαγές πλατφόρμας είναι συχνές. Για να δείτε το πλήρες σύνολο των κωδικών μορφοποίησης που υποστηρίζονται στην πλατφόρμα σας, συμβουλευτείτε την τεκμηρίωση strftime(3). Υπάρχουν επίσης διαφορές μεταξύ των πλατφορμών στην επεξεργασία μη υποστηριζόμενων προδιαγραφών μορφοποίησης.
Added in version 3.6: %G, %u και %V προστέθηκαν.
Added in version 3.12: %:z προστέθηκε.
Τεχνική Λεπτομέρεια¶
Σε γενικές γραμμές, το d.strftime(fmt) λειτουργεί όπως το time.strftime(fmt, d.timetuple()) του module time αν και, δεν υποστηρίζουν όλα τα αντικείμενα μια μέθοδο timetuple().
Για τη μέθοδο κλάσης datetime.strptime(), η προεπιλεγμένη τιμή είναι 1900-01-01T00:00:00.000: οποιαδήποτε στοιχεία δεν καθορίζονται στη μορφή θα αντληθούν από την προεπιλεγμένη τιμή. [4]
Η χρήση του datetime.strptime(date_string, format) είναι ισοδύναμη με:
datetime(*(time.strptime(date_string, format)[0:6]))
εκτός αν η μορφή περιλαμβάνει υπο-δευτερόλεπτα ή πληροφορίες ζώνης ώρας, οι οποίες υποστηρίζονται στο datetime.strptime αλλά απορρίπτονται από το time.strptime.
Για τα αντικείμενα time, οι κωδικοί μορφοποίησης για το έτος, τον μήνα και την ημέρα δεν πρέπει να χρησιμοποιούνται, καθώς τα αντικείμενα time δεν έχουν τέτοιες τιμές. Εάν χρησιμοποιηθούν ούτως ή άλλως, το έτος αντικαθίσταται με το 1900, και ο μήνας και η ημέρα με το 1.
Για date αντικείμενα, οι κωδικοί μορφοποίησης για τις ώρες, τα λεπτά, τα δευτερόλεπτα και τα μικροδευτερόλεπτα δεν πρέπει να χρησιμοποιούνται, καθώς τα αντικείμενα date δεν έχουν τέτοιες τιμές. Εάν χρησιμοποιηθούν ούτως ή άλλως, το 0 το αντικαθιστά.
Για τον ίδιο λόγο, η επεξεργασία συμβολοσειρών μορφοποίησης που περιέχουν σημεία κώδικα Unicode που δεν μπορούν να αναπαρασταθούν στο charset της τρέχουσας τοποθεσίας είναι επίσης εξαρτώμενη από την πλατφόρμα. Σε ορισμένες πλατφόρμες, τέτοια σημεία κώδικα διατηρούνται άθικτα στην έξοδο, ενώ σε άλλες το strftime μπορεί να κάνει raise μια UnicodeError ή να επιστρέψει μια κενή συμβολοσειρά.
Σημειώσεις:
Επειδή η μορφή εξαρτάται από την τρέχουσα τοποθεσία, θα πρέπει να προσέχετε όταν κάνετε υποθέσεις σχετικά με την τιμή εξόδου. Οι διατάξεις πεδίων θα διαφέρουν (για παράδειγμα, «μήνας/ημέρα/έτος» σε σύγκριση με «ημέρα/μήνας/έτος»), και η έξοδος μπορεί να περιέχει μη-ASCII χαρακτήρες.
Η μέθοδος
strptime()μπορεί να αναλύσει έτη στο πλήρες εύρος [1, 9999], αλλά τα έτη < 1000 πρέπει να είναι μηδενικά γεμισμένα σε πλάτος 4 ψηφίων.Άλλαξε στην έκδοση 3.2: Σε προηγούμενες εκδόσεις, η μέθοδος
strftime()περιορίζεται σε έτη >= 1900.Άλλαξε στην έκδοση 3.3: Στην έκδοση 3.2, η μέθοδος
strftime()περιορίζεται σε έτη >= 1000.Όταν χρησιμοποιείται με τη μέθοδο
strptime(), η οδηγία%pεπηρεάζει μόνο το πεδίο εξόδου ώρας εάν η οδηγία%Iχρησιμοποιείται για να αναλύσει την ώρα.Σε αντίθεση με το
time, τοdatetimeδεν υποστηρίζει δευτερόλεπτα άλματος (leap seconds).Όταν χρησιμοποιείται με τη μέθοδο
strptime(), η οδηγία%fαποδέχεται από ένα έως έξι ψηφία και γεμίζει με μηδενικά στα δεξιά. Η Η%fείναι μια επέκταση του συνόλου χαρακτήρων μορφοποίησης στο C standard (αλλά υλοποιημένη χωριστά σε αντικείμενα datetime, και επομένως πάντα διαθέσιμη).Για ένα αδαές αντικείμενο, οι κωδικοί μορφοποίησης
%z,%:zκαι%Zαντικαθίστονται με κενές συμβολοσειρές.Για ένα ενήμερο αντικείμενο:
%zΗ
utcoffset()μετατρέπεται σε μια συμβολοσειρά της μορφής±HHMM[SS[.ffffff]], όπουHHείναι μια 2-ψήφια συμβολοσειρά που δίνει τον αριθμό των ωρών διαφοράς UTC,MMείναι μια 2-ψήφια συμβολοσειρά που δίνει τον αριθμό των λεπτών διαφοράς UTC,SSείναι μια 2-ψήφια συμβολοσειρά που δίνει τον αριθμό των δευτερολέπτων διαφοράς UTC καιffffffείναι μια 6-ψήφια συμβολοσειρά που δίνει τον αριθμό των μικροδευτερολέπτων διαφοράς UTC. Το τμήμαffffffπαραλείπεται όταν η διαφορά είναι ένας ακέραιος αριθμός δευτερολέπτων και τόσο το τμήμαffffffόσο και το τμήμαSSπαραλείπονται όταν η διαφορά είναι ένας ακέραιος αριθμός λεπτών. Για παράδειγμα, εάν ηutcoffset()επιστρέψειtimedelta(hours=-3, minutes=-30), το%zαντικαθίσταται με τη συμβολοσειρά'-0330'.
Άλλαξε στην έκδοση 3.7: Η απόκλιση UTC δεν περιορίζεται σε ακέραιο αριθμό λεπτών.
Άλλαξε στην έκδοση 3.7: Όταν η οδηγία
%zπαρέχεται στη μέθοδοstrptime(), οι διαφορές UTC μπορούν να έχουν μια άνω κάτω τελεία ως διαχωριστικό μεταξύ ωρών, λεπτών και δευτερολέπτων. Για παράδειγμα, το'+01:00:00'θα αναλυθεί ως μια διαφορά μίας ώρας. Επιπλέον, η παροχή'Z'είναι ταυτόσημη με'+00:00'.%:zΣυμπεριφέρεται ακριβώς ως
%z, αλλά έχει μια άνω κάτω τελεία ως διαχωριστικό μεταξύ ωρών, λεπτών και δευτερολέπτων.%ZΣτην
strftime(), το%Zαντικαθίσταται με μια κενή συμβολοσειρά αν ηtzname()επιστρέψειNone· διαφορετικά το%Zαντικαθίσταται με την επιστρεφόμενη τιμή, η οποία πρέπει να είναι μια συμβολοσειρά.Η
strptime()δέχεται μόνο συγκεκριμένες τιμές για το%Z:οποιαδήποτε τιμή στο
time.tznameγια την τοποθεσία του μηχανήματός σαςοι σταθερές τιμές
UTCκαιGMT
Έτσι, κάποιος που ζει στην Ιαπωνία μπορεί να έχει
JST,UTCκαιGMTως έγκυρες τιμές, αλλά πιθανότατα όχιEST. Θα γίνει raiseValueErrorγια μη έγκυρες τιμές.
Άλλαξε στην έκδοση 3.2: Όταν η οδηγία
%zπαρέχεται στη μέθοδοstrptime(), ένα αντικείμενοdatetimeμε γνώση ζώνης θα παραχθεί. Τοtzinfoτου αποτελέσματος θα ρυθμιστεί σε μιαtimezoneπαρουσία.Όταν χρησιμοποιείται με τη μέθοδο
strptime(), το%Uκαι το%Wχρησιμοποιούνται μόνο σε υπολογισμούς όταν η ημέρα της εβδομάδας και το ημερολογιακό έτος (%Y) είναι καθορισμένα.Παρόμοια με
%Uκαι%W, το%Vχρησιμοποιείται μόνο σε υπολογισμούς όταν η ημέρα της εβδομάδας και το ISO έτος (%G) είναι καθορισμένα σε μια συμβολοσειρά μορφήςstrptime(). Σημειώστε επίσης ότι%Gκαι%Yδεν είναι ανταλλάξιμα.Όταν χρησιμοποιείται με τη μέθοδο
strptime(), το μηδενικό ψηφίο μπροστά είναι προαιρετικό για τις μορφές%d,%m,%H,%I,%M,%S,%j,%U,%Wκαι%V. Η μορφή%yαπαιτεί μπροστά μηδενικό ψηφίο.Όταν αναλύετε μήνα και ημέρα χρησιμοποιώντας
strptime(), πάντα συμπεριλάβετε ένα έτος στη μορφή. Εάν η τιμή που πρέπει να αναλύσετε δεν περιέχει έτος, προσθέστε ένα ρητό ψευδο δίσεκτο έτος. Διαφορετικά, ο κώδικάς σας θα κάνει raise μια εξαίρεση όταν συναντήσει την ημέρα του δίσεκτου επειδή το προεπιλεγμένο έτος που χρησιμοποιείται από τον αναλυτή δεν είναι δίσεκτο. Οι χρήστες συναντούν αυτό το σφάλμα κάθε τέσσερα χρόνια…>>> month_day = "02/29" >>> datetime.strptime(f"{month_day};1984", "%m/%d;%Y") # No leap year bug. datetime.datetime(1984, 2, 29, 0, 0)
Καταργήθηκε από την έκδοση 3.13, θα αφαιρεθεί στην έκδοση 3.15: Κλήσεις της
strptime()με format string που περιέχει ημέρα του μήνα χωρίς έτος εμφανίζουν πλέονDeprecationWarning. Στην έκδοση 3.15 ή μεταγενέστερη αυτό μπορεί να μετατραπεί σε σφάλμα ή να αλλάξει το προεπιλεγμένο έτος σε δίσεκτο. Δείτε gh-70647.
Υποσημειώσεις