Ich habe versucht, die Bibliothek, die Datum und Uhrzeit in Python behandelt, in umgekehrter Reihenfolge zusammenzufassen.
Der Inhalt dieses Artikels wurde mit Sorgfalt verfasst, ist jedoch keine offizielle Information. Bitte beziehen Sie sich auf die offizielle Referenz (Referenz Nr. 1) für genaue Informationen.
Das meiste davon handelt von Standardmodulen. Wenn Sie also neu in Python sind oder mit der Datums- und Zeitbibliothek nicht vertraut sind. (Weil ich noch neu in Python bin.)
Python2 wurde mit v2.7.10 und Python3 mit v3.5.1 bestätigt. (Anaconda 4.0.0 Windows 64-Bit-Version wird verwendet.)
Diejenigen, die Python 2 und Python 3 nicht separat behandeln, können gemeinsam verwendet werden.
In diesem Fall wird print
mit Klammern vereinheitlicht und das Ausführungsergebnis ist Python3.
Der Beispielcode zeigt die Ergebnisse hauptsächlich in einer interaktiven Umgebung.
Die Erweiterungsmodulversionen sind wie folgt.
dateutil 2.5.1
pytz 2016.2
Eine kurze Beschreibung der Standardmodule für Datum und Uhrzeit und der darin enthaltenen Typen. Einzelheiten finden Sie in der offiziellen Referenz (Referenzmaterial Nr. 1).
Im Text wird "from datetime import *" angewendet, sofern nicht anders angegeben.
Modul | Erläuterung |
---|---|
datetime Modul |
Bietet Standardtypen und -operationen für Datum und Uhrzeit. |
time Modul |
Enthält Zeitdienstprogramme auf niedriger Ebene (Systemebene). |
calendar Modul |
Es enthält hauptsächlich Dienstprogramme für Textkalender. |
Modul | Erläuterung |
---|---|
dateutil |
Ein Modul, das die Datums- und Uhrzeitverarbeitung ausgleicht, die dem Standardmodul fehlt. |
pytz |
Ein Modul, das Zeitzonen behandelt. Details werden später beschrieben. |
Schimmel | Erläuterung |
---|---|
datetime.date |
Datumsobjekt. |
datetime.datetime |
Datums- und Uhrzeitobjekt. |
datetime.time |
Zeitobjekt.time Nicht zu verwechseln mit Modulen. |
datetime.timedelta |
Ein Objekt, das den Unterschied zwischen zwei Datums- und Uhrzeitangaben darstellt. |
datetime.tzinfo |
Abstrakte Basisklasse für Zeitzoneninformationen. |
datetime.timezone |
Implementierung mit festem Versatz der Zeitzoneninformationen. |
time.struct_time |
UNIXstruct tm Benannter Taple äquivalent zu (Struktur). |
Die Typhierarchie des Moduls "datetime" ist wie folgt.
object
timedelta
tzinfo
timezone
time
date
datetime
Im Folgenden wird der Modulname des Typs im Text weggelassen.
Einige der gleichen "datetime" -Objekte haben eine Zeitzone, andere nicht. In Python wird "Datum / Uhrzeit" mit einer Zeitzone als "bewusst" (Datum und Uhrzeit) und "Datum / Uhrzeit" ohne Zeitzone als "naiv" (Datum und Uhrzeit) bezeichnet.
Das Objekt "Datum" kann immer naiv sein und das Objekt "Uhrzeit" kann es auch sein.
Das in Python 3.2 hinzugefügte Objekt "Zeitzone" ist als Instanz der Zeitzone ("tzinfo") verfügbar.
Zuvor war die Implementierung von "tzinfo" im Standardmodul nicht vorhanden.
Verwenden Sie in solchen Fällen das Pytz-Modul.
Die tzinfo
-Implementierung hat auch ein Submodul tz
des dateutil
-Moduls.
Wenn Sie die Zeitzone mit einem beliebigen Versatzwert angeben möchten (+09: 00 für JST), ist "Zeitzone" jedoch ausreichend Das "Pytz" -Modul wird empfohlen, wenn Sie mit Zeitzonen-Strenge umgehen müssen. Das Pytz-Modul verweist auf die IANA-Zeitzonendatenbank (Olson-Datenbank). Einzelheiten finden Sie in der offiziellen Referenz (Referenzmaterial Nr. 1).
Informationen zur IANA-Zeitzonendatenbank finden Sie in den folgenden Artikeln.
tz database - Wikipedia https://ja.wikipedia.org/wiki/Tz_database
Die Konvertierungsmethode zwischen naiv und bewusst wird in diesem Band erläutert.
Es kann vom Konstruktor generiert werden. Das "Zeit" -Objekt wird weggelassen.
>>> from datetime import datetime, date, timezone, timedelta
>>>
>>> datetime(2016, 7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Required argument 'day' (pos 3) not found
>>> datetime(2016, 7, 5)
datetime.datetime(2016, 7, 5, 0, 0)
>>> datetime(2016, 7, 5, 13)
datetime.datetime(2016, 7, 5, 13, 0)
>>> datetime(2016, 7, 5, 13, 45)
datetime.datetime(2016, 7, 5, 13, 45)
>>> datetime(2016, 7, 5, 13, 45, 27)
datetime.datetime(2016, 7, 5, 13, 45, 27)
>>> datetime(2016, 7, 5, 13, 45, 27, 123456)
datetime.datetime(2016, 7, 5, 13, 45, 27, 123456)
>>> datetime(2016, 7, 5, 13, 45, 27, 123456, timezone(timedelta(hours=+9)))
datetime.datetime(2016, 7, 5, 13, 45, 27, 123456, tzinfo=datetime.timezone(datetime.timedelta(0, 32400)))
>>>
>>> date(2016, 7)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Required argument 'day' (pos 3) not found
>>> date(2016, 7, 5)
datetime.date(2016, 7, 5)
>>> date(2016, 7, 5, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: function takes at most 3 arguments (4 given)
Das siebte Element von "datetime" ist Mikrosekunden (1 / 1.000.000 Sekunden).
Es kann auch aus einem Zeitstempel generiert werden. Im nächsten Abschnitt finden Sie den Zeitstempel des aktuellen Datums und der aktuellen Uhrzeit.
>>> datetime.fromtimestamp(12345678901.234567)
datetime.datetime(2361, 3, 22, 4, 15, 1, 234568)
>>> date.fromtimestamp(12345678901.234567)
datetime.date(2361, 3, 22)
Der Zeitstempel (float) ist hier ein Wert, der als ** UNIX-Zeit ** oder Epochensekunden bezeichnet wird.
UNIX Time-Wikipedia https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93
Die UNIX-Zeit ist ein ganzzahliger Wert, in Python wird sie jedoch durch "float" dargestellt. Werte nach dem Dezimalpunkt werden in Python als Mikrosekunden behandelt. Wie Sie im Beispiel sehen können, werden sie durch den Bruchteil von "float" dargestellt, sodass die Genauigkeit verringert wird.
Mit der Methode "datetime.date ()" können Sie nur den Datumsteil als "Datum" abrufen.
>>> from datetime import datetime, date
>>>
>>> dt = datetime.now()
>>> dt
datetime.datetime(2016, 7, 14, 14, 24, 46, 157000)
>>> dt.date()
datetime.date(2016, 7, 14)
datetime.now ()
gibt ein datetime
-Objekt zurück, das das aktuelle Datum und die aktuelle Uhrzeit angibt.
date.today ()
gibt ein date
-Objekt zurück, das den aktuellen Tag angibt.
>>> from datetime import datetime, date
>>>
>>> datetime.now()
datetime.datetime(2016, 7, 14, 14, 14, 2, 900000)
>>> date.today()
datetime.date(2016, 7, 14)
Sie können den Zeitstempel des aktuellen Datums und der aktuellen Uhrzeit mit der Funktion time ()
des Moduls time
abrufen.
Den Zeitstempel finden Sie im vorherigen Abschnitt.
>>> import time
>>>
>>> time.time()
1468473337.565 # 2016-07-14 14:15:37.565000
Es gibt einige andere (altmodische) Funktionen, die "struct_time" im "time" -Modul zurückgeben, aber ich werde sie diesmal nicht behandeln.
Bitte lesen Sie die Erklärung zur Funktion time.gmtime ()
.
Das Modul datetime
verwendet die Funktion datetime.strptime ()
.
Wie Sie den Ergebnissen unten entnehmen können, ist diese Funktion jedoch unflexibel.
>>> from datetime import datetime, timezone, timedelta
>>> datetime.strptime("2016/07/05 13:45:06", "%Y/%m/%d %H:%M:%S")
datetime.datetime(2016, 7, 5, 13, 45, 6)
>>> datetime.strptime("2016/07/05 13:45", "%Y/%m/%d %H:%M:%S")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "...\lib\_strptime.py", line 500, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "...\lib\_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data '2016/07/05 13:45' does not match format '%Y/%m/%d %H:%M:%S'
(* Der Trace-Inhalt wird teilweise verarbeitet.)
Die parse ()
Funktion des parser
Submoduls des dateutil
Moduls ist mächtig, also lasst uns das verwenden.
>>> from dateutil.parser import parse
>>>
>>> parse("Tue Aug 23 17:00:35 JST 2016")
datetime.datetime(2016, 8, 23, 17, 0, 35)
>>> parse("2016-07-03T11:22:33Z")
datetime.datetime(2016, 7, 3, 11, 22, 33, tzinfo=tzutc())
>>> parse("2016/07/03 04:05:06")
datetime.datetime(2016, 7, 3, 4, 5, 6)
>>> parse("2016/07/03")
datetime.datetime(2016, 7, 3, 0, 0)
Im Fall von Python2 ist der folgende Fehler aufgetreten.
.../dateutil/parser.py:598: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
elif res.tzname and res.tzname in time.tzname:
Es scheint mit dem in diesem ↓ Artikel beschriebenen Problem zu tun zu haben, tritt jedoch auf, obwohl die Version von dateutil
2.5.1 ist.
Ist es ein ähnlicher, aber anderer (nicht behobener) Fehler?
twitter - python dateutil unicode warning - Stack Overflow http://stackoverflow.com/questions/21296475/python-dateutil-unicode-warning
Verwenden Sie zum Konvertieren in das ISO8601-Format die Methode date.isoformat ()
.
Dies wird verwendet, wenn einfach ein "Datum / Uhrzeit" - oder "Datum" -Objekt in eine Zeichenfolge konvertiert wird.
Wenn Sie es in eine Zeichenfolge in einem beliebigen Format konvertieren möchten, verwenden Sie die Methode strftime ()
.
>>> from datetime import datetime, timezone, timedelta
>>>
>>> dt1 = datetime(2016, 7, 5, 13, 45) # naive
>>> dt2 = datetime(2016, 7, 5, 13, 45, tzinfo=timezone(timedelta(hours=+9))) # aware
>>> d = dt1.date()
>>> dt1, dt2, d
(datetime.datetime(2016, 7, 5, 13, 45), datetime.datetime(2016, 7, 5, 13, 45, tzinfo=datetime.timezone(datetime.timedelta(0, 32400))), datetime.date(2016, 7, 5))
>>>
>>> dt1.isoformat()
'2016-07-05T13:45:00'
>>> str(dt1)
'2016-07-05 13:45:00'
>>>
>>> dt2.isoformat()
'2016-07-05T13:45:00+09:00'
>>> str(dt2)
'2016-07-05 13:45:00+09:00'
>>>
>>> d.isoformat()
'2016-07-05'
>>> str(d)
'2016-07-05'
>>>
>>> dt1.strftime("%Y/%m/%d %H:%M:%S")
'2016/07/05 13:45:00'
>>> dt1.strftime("%Y/%m/%d %H:%M:%S %Z %z")
'2016/07/05 13:45:00 '
>>> dt2.strftime("%Y/%m/%d %H:%M:%S %Z %z")
'2016/07/05 13:45:00 UTC+09:00 +0900'
Das Format des Formats entnehmen Sie bitte der unten stehenden Referenz.
8.1.8. Verhalten von strftime () und strptime () --8.1. Datetime - Grundlegende Datums- und Zeittypen - Python 3.5.1-Dokumentation http://docs.python.jp/3.5/library/datetime.html#strftime-strptime-behavior
Vergleiche sind mit den Vergleichsoperatoren ==
, ! =
, <
, <=
, >
, > =
Möglich.
Sie können "Datum / Uhrzeit" und "Datum" nicht vergleichen.
(TypeError: can't compare datetime.datetime to datetime.date
)
Außerdem kann "datetime" nicht zwischen bewusst und naiv verglichen werden.
(TypeError: can't compare offset-naive and offset-aware datetimes
)
Sie müssen sie vor dem Vergleich einem der beiden Typen zuordnen.
>>> from datetime import datetime, date
>>>
>>> dt1 = datetime(2016, 7, 1, 22, 30)
>>> dt2 = datetime(2016, 7, 5, 13, 45)
>>>
>>> dt1 == datetime(2016, 7, 1, 22, 30, 0)
True
>>> dt1 == dt1, dt1 == dt2, dt1 != dt1, dt1 != dt2, dt1 < dt2, dt1 > dt2, dt1 <= dt1, dt2 <= dt1, dt2 >= dt2, dt1 >= dt2
(True, False, False, True, True, False, True, False, True, False)
>>>
>>> d1 = dt1.date()
>>> d2 = dt2.date()
>>>
>>> d1 == date(2016, 7, 1)
True
>>> d1 == d1, d1 == d2, d1 != d1, d1 != d2, d1 < d2, d1 > d2, d1 <= d1, d2 <= d1, d2 >= d2, d1 >= d2
(True, False, False, True, True, False, True, False, True, False)
In Python werden die Datums- und Zeitintervalle und -unterschiede durch "timedelta" -Objekte dargestellt.
(Delta
bedeutet Differenz (Differenz ⇒ Δ).)
timedelta
kann durch Subtrahieren von datetime
s oder date
s ( -
Operation) erhalten werden.
Es kann nicht mit "Datum / Uhrzeit" und "Datum" berechnet werden.
(TypeError: unsupported operand type(s) for -
)
Es ist auch nicht möglich, zwischen bewusst und naiv zu rechnen, selbst nicht zwischen "datetime".
(TypeError: can't subtract offset-naive and offset-aware datetimes
)
Sie müssen es vor der Berechnung einem der beiden Typen zuordnen.
>>> from datetime import datetime, date
>>>
>>> d1, d2 = date(2016, 7, 1), date(2016, 7, 3)
>>>
>>> type(d2 - d1)
<class 'datetime.timedelta'>
>>> d2 - d1
datetime.timedelta(2)
>>> str(d2 - d1)
'2 days, 0:00:00'
>>> str(d1 - d2)
'-2 days, 0:00:00'
>>>
>>> dt1, dt2 = datetime(2016, 7, 1, 10, 30), datetime(2016, 7, 3, 9, 10)
>>> dt2 - dt1
datetime.timedelta(1, 81600)
>>> str(dt2 - dt1)
'1 day, 22:40:00'
Wie im vorherigen Abschnitt erwähnt, ist der Unterschied zwischen den beiden Daten die Anzahl der zurückgegebenen Tage. Was ist, wenn ich wissen möchte, in welchem Monat zwischen zwei Daten liegt?
Versuchen Sie in diesem Fall, das Submodul "relativedelta" des Moduls "dateutil" zu verwenden. Grundsätzlich sollte dies das Problem lösen.
>>> from datetime import date
>>> from dateutil.relativedelta import relativedelta
>>>
>>> d1, d2 = date(2014, 11, 22), date(2016, 3, 1)
>>> str(d2 - d1)
'465 days, 0:00:00'
>>> delta = relativedelta(d2, d1)
>>> delta
relativedelta(years=+1, months=+3, days=+8)
>>> month_count = delta.years * 12 + delta.months
>>> month_count
15
Es wird 12 Jahre oder länger "Jahre" sein, aber ich konnte die Anzahl der Monate mit "Jahren * 12 + Monate" berechnen.
Was hier etwas besorgniserregend ist, ist die Berechnung zum Monatsende, insbesondere um den Februar des feuchten Jahres. Also habe ich die beiden Daten um einen Tag verschoben und überprüft, wie das Delta in diesem Fall aussehen würde.
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta
d1 = date(2016, 2, 26)
d2 = date(2016, 3, 26)
delta1day = timedelta(days=1)
for x in range(9):
print(d1, d2, relativedelta(d2, d1))
d1 += delta1day
d2 += delta1day
2016-02-26 2016-03-26 relativedelta(months=+1)
2016-02-27 2016-03-27 relativedelta(months=+1)
2016-02-28 2016-03-28 relativedelta(months=+1)
2016-02-29 2016-03-29 relativedelta(months=+1)
2016-03-01 2016-03-30 relativedelta(days=+29)
2016-03-02 2016-03-31 relativedelta(days=+29)
2016-03-03 2016-04-01 relativedelta(days=+29)
2016-03-04 2016-04-02 relativedelta(days=+29)
2016-03-05 2016-04-03 relativedelta(days=+29)
Ich habe mir die Daten weiter vorne angesehen, aber grob gesagt scheint es, dass sie nur dann besonders behandelt werden, wenn sie Ende Februar überschreiten. Davon abgesehen war die Anzahl der Tage gleich (+29).
Als ich das Intervall zwischen den beiden Daten um einen Tag verlängerte, änderte sich die Anzahl der Tage, je nachdem, ob das Ende des 30. Monats überschritten wurde oder nicht. Ich bin sicher, dass es am letzten Tag des Monats korrigiert wird.
Es scheint in Ordnung zu sein, wenn Sie die Natur dieses Gebiets verstehen.
Ich habe bereits geschrieben, dass "datetime --datetime" und "date --date" zu "timedelta" werden. Für die Erhöhung / Verringerung des Datums / Datums können Sie die erhöhte / verringerte "Datum / Uhrzeit" und "Datum" erhalten, indem Sie "Zeitdelta" addieren / subtrahieren.
>>> from datetime import datetime, date, timedelta
>>>
>>> dt = datetime(2016, 7, 5, 13, 45)
>>> d = dt.date()
>>>
>>> dt + timedelta(days=5, minutes=168)
datetime.datetime(2016, 7, 10, 16, 33)
>>> d - timedelta(days=13)
datetime.date(2016, 6, 22)
Verwenden Sie zur monatlichen Anpassung das Submodul "relativedelta" des Moduls "dateutil", wie bei der Berechnung der Anzahl der Monate.
>>> from datetime import date
>>> from dateutil.relativedelta import relativedelta
>>>
>>> date(2016, 7, 5) - relativedelta(months=32)
datetime.date(2013, 11, 5)
Das folgende Beispiel bestätigt die gegenseitige Konvertierung zwischen naiv und bewusst in Python3 nur mit dem Standardmodul. In Python2 gibt es keinen Typ "Zeitzone" (genauer gesagt weniger als Python3.2). Verwenden Sie stattdessen das Modul "Pytz".
Verwenden Sie die Methode "datetime.replace ()", um eine naive "datetime" in eine bewusste "datetime" zu ändern.
>>> from datetime import datetime, timezone, timedelta
>>>
>>> jst = timezone(timedelta(hours=+9)) #Bei Verwendung von Pytz Pytz.timezone('Asia/Tokyo')
>>> jst
datetime.timezone(datetime.timedelta(0, 32400))
>>> dt = datetime(2016, 7, 5, 13, 45) # naive
>>> dt
datetime.datetime(2016, 7, 5, 13, 45)
>>> dt2 = dt.replace(tzinfo=jst) # aware
>>> dt2
datetime.datetime(2016, 7, 5, 13, 45, tzinfo=datetime.timezone(datetime.timedelta(0, 32400)))
>>> str(dt2)
'2016-07-05 13:45:00+09:00'
Gemäß Referenz Nr. 4-2 wurde berichtet, dass sich eine Zeitzone beim Hinzufügen durch die Methode "datetime.replace ()" etwas seltsam verhält.
Eine Alternative ist die Verwendung von "jst.localize (datetime (...))".
Ich habe es in meiner Umgebung nicht reproduziert, daher ist es möglicherweise ein Fehler in einer älteren Version von pytz
.
Um umgekehrt eine bewusste "datetime" in eine naive "datetime" umzuwandeln, verwenden Sie dieselbe "datetime.replace ()" - Methode. Geben Sie für die Zeitzone "Keine" an, was "Keine" bedeutet.
#(Fortsetzung von oben)
>>> dt3 = dt2.replace(tzinfo=None)
>>> dt3
datetime.datetime(2016, 7, 5, 13, 45)
>>> str(dt3)
'2016-07-05 13:45:00'
struct_time
in datetime
oder date
Der Zeitstempeltyp wird manchmal durch "struct_time" dargestellt, aber wenn Sie dies in den "datetime" -Typ konvertieren möchten.
Verwenden der Funktionen time.mktime ()
und datetime.fromtimestamp ()
,
struct_time
→timestamp(float)
→datetime
In der Reihenfolge von konvertieren.
>>> from datetime import datetime, date
>>> from time import localtime, mktime
>>>
>>> tm = localtime() # struct_time
>>> t = mktime(tm) #Zeitstempel(float)Umstellung auf
>>> datetime.fromtimestamp(t)
datetime.datetime(2016, 7, 12, 22, 31, 15)
>>> date.fromtimestamp(t)
datetime.date(2016, 7, 12)
Wenn Sie die Tatsache ausnutzen, dass struct_time
ein Tupel ist, können Sie auch schreiben:
#(Fortsetzung von oben)
>>> datetime(*tm[:6])
datetime.datetime(2016, 7, 12, 22, 31, 15)
tm [: 6]
gibt ein Taple aus Jahr, Monat, Tag, Stunde, Minute und Sekunde an, sodass wir es als sechs Argumente an den Konstruktor von datetime
übergeben.
Dies ist prägnant, verringert jedoch die Lesbarkeit und kann vermieden werden.
Wenn Sie im Gegensatz zum vorherigen Abschnitt ein "datetime" -Objekt oder ein "date" -Objekt in ein "struct_time" -Objekt konvertieren möchten,
Sie können struct_time
mit der date.timetuple ()
Methode abrufen.
>>> from datetime import datetime
>>>
>>> dt = datetime(2016, 7, 3, 12, 25)
>>> d = dt.date()
>>>
>>> dt.timetuple()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=3, tm_hour=12, tm_min=25, tm_sec=0, tm_wday=6, tm_yday=185, tm_isdst=-1)
>>> d.timetuple()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=185, tm_isdst=-1)
Hier wird nur das Datumsbeispiel geschrieben. Bei Datum und Uhrzeit sollte jede Methode anwendbar sein, indem Typ und Einheit geändert werden.
Um eine endliche Datumsliste zu erstellen, habe ich schnell eine Möglichkeit gefunden, "timedelta" und "range" zu kombinieren, um eine Liste in Einschlussnotation zu erstellen.
>>> from datetime import date, timedelta
>>>
>>> start_date = date(2016, 7, 5)
>>> a = [start_date + timedelta(days=x) for x in range(5)]
>>> a
[datetime.date(2016, 7, 5), datetime.date(2016, 7, 6), datetime.date(2016, 7, 7), datetime.date(2016, 7, 8), datetime.date(2016, 7, 9)]
... aber ich bin ein bisschen enttäuscht, dass ich nicht in einer Zeile schreiben kann.
(Sie können date (2016, 7, 5)
direkt anstelle von start_date
schreiben, aber natürlich nicht.)
Sie können in einer Zeile mit dem Submodul rrule
des Moduls dateutil
schreiben.
>>> from datetime import date
>>> from dateutil.rrule import rrule, DAILY
>>>
>>> a = [x.date() for x in rrule(DAILY, count=5, dtstart=date(2016, 7, 5))]
>>> a
[datetime.date(2016, 7, 5), datetime.date(2016, 7, 6), datetime.date(2016, 7, 7), datetime.date(2016, 7, 8), datetime.date(2016, 7, 9)]
Oh ja, ich wollte so schreiben.
In einigen Fällen kann es bequemer sein, das Pandas-Modul (pandas.date_range
) zu verwenden.
Siehe Referenz Nr. 5 für Details.
Verwenden Sie die Funktion "isleap" des Moduls "calendar".
>>> import calendar
>>>
>>> calendar.isleap(2016)
True
>>> calendar.isleap(2015)
False
>>>
>>> from datetime import date
>>>
>>> d = date(2016, 7, 5)
>>> calendar.isleap(d.year)
True
Ab Python 3.5 werden alle datetime-bezogenen Objekte im "datetime" -Modul mit Ausnahme des Äquivalents "timedelta (0)" als "True" ausgewertet. ("Zeitzone" wurde im Dokument nicht erwähnt und ist daher nicht in "Alle" enthalten.)
>>> from datetime import *
>>>
>>> bool(datetime.fromtimestamp(0))
True
>>> bool(date.fromtimestamp(0))
True
>>> bool(time(0, 0, 0))
True
>>> bool(timedelta(1))
True
>>> bool(timedelta(0))
False
>>> bool(timezone.utc)
True
Übrigens wird in Python2 das "Zeit" -Objekt um Mitternacht als "Falsch" ausgewertet.
>>> from datetime import *
>>> bool(time(0, 0, 0))
False
Dies ist ein Fehler (Issue13936), der in weniger als Python3.5 und nicht in Python2 vorhanden war. Dieses Verhalten wurde in Python3.5 behoben. Als ich es mit Python 3.4.3 überprüfte, war es immer noch "False".
Diese Methode wird auch in anderen Sprachen verwendet, wird jedoch berechnet durch (Zeitstempel nach der Verarbeitung - Zeitstempel vor der Verarbeitung).
import time
t = time.time()
time.sleep(3.1)
print(time.time() - t)
# => 3.0999999046325684
Obwohl diesmal nicht behandelt, können Sie auch die folgenden Module verwenden, um die Ausführungszeit von Codefragmenten zu messen.
27.5. Timeit - Zeitmessung kleiner Codefragmente - Python 3.5.1-Dokumentation http://docs.python.jp/3.5/library/timeit.html
Es ist ein Bild, wenn jedes Objekt von "pickle" serialisiert wird.
>>> from datetime import datetime
>>> import pickle
>>>
>>> dt = datetime(2016, 7, 5, 13, 45)
>>>
>>> pickle.dumps(dt) # datetime
"cdatetime\ndatetime\np0\n(S'\\x07\\xe0\\x07\\x05\\r-\\x00\\x00\\x00\\x00'\np1\ntp2\nRp3\n."
>>> pickle.dumps(dt.date()) # date
"cdatetime\ndate\np0\n(S'\\x07\\xe0\\x07\\x05'\np1\ntp2\nRp3\n."
>>> pickle.dumps(dt.timetuple()) # struct_time
'ctime\nstruct_time\np0\n((I2016\nI7\nI5\nI13\nI45\nI0\nI1\nI187\nI-1\ntp1\n(dp2\ntp3\nRp4\n.'
>>> pickle.dumps(dt - dt) # timedelta
'cdatetime\ntimedelta\np0\n(I0\nI0\nI0\ntp1\nRp2\n.'
>>> from datetime import datetime
>>> import pickle
>>>
>>> dt = datetime(2016, 7, 5, 13, 45)
>>> pickle.dumps(dt) # datetime
b'\x80\x03cdatetime\ndatetime\nq\x00C\n\x07\xe0\x07\x05\r-\x00\x00\x00\x00q\x01\x85q\x02Rq\x03.'
>>> pickle.dumps(dt.date()) # date
b'\x80\x03cdatetime\ndate\nq\x00C\x04\x07\xe0\x07\x05q\x01\x85q\x02Rq\x03.'
>>> pickle.dumps(dt.timetuple()) # struct_time
b'\x80\x03ctime\nstruct_time\nq\x00(M\xe0\x07K\x07K\x05K\rK-K\x00K\x01K\xbbJ\xff\xff\xff\xfftq\x01}q\x02(X\x07\x00\x00\x00tm_zoneq\x03NX\t\x00\x00\x00tm_gmtoffq\x04Nu\x86q\x05Rq\x06.'
>>> pickle.dumps(dt - dt) # timedelta
b'\x80\x03cdatetime\ntimedelta\nq\x00K\x00K\x00K\x00\x87q\x01Rq\x02.'
#1. (Offizielles Dokument / Standardbibliotheksreferenz)
8.1. Datum / Uhrzeit - Grundlegende Datums- und Uhrzeittypen - Python 3.5.1-Dokumentation http://docs.python.jp/3.5/library/datetime.html#module-datetime 8.1. Datum / Uhrzeit - grundlegende Datums- und Uhrzeittypen - Python 2.7.x-Dokumentation http://docs.python.jp/2/library/datetime.html#module-datetime
(Links für andere Module als "datetime" sind redundant und werden weggelassen. Es gibt irgendwo auf der obigen Link-Seite einen Link, also überspringen Sie bitte von dort.)
#2. dateutil - powerful extensions to datetime — dateutil 2.5.3 documentation https://dateutil.readthedocs.io/en/stable/
#3. pytz 2016.4 : Python Package Index https://pypi.python.org/pypi/pytz/
#4-1. Python-Datumsverarbeitung und TimeZone | Nekoya Press http://nekoya.github.io/blog/2013/06/21/python-datetime/
#4-2. Verwenden Sie replace nicht, um datzin in Python | Nekoya Press tzinfo zu geben http://nekoya.github.io/blog/2013/07/05/python-datetime-with-jst/
#5. Mit Python pandas-StatsFragments können Sie datums- und zeitbezogene Daten einfach bearbeiten http://sinhrks.hatenablog.com/entry/2014/11/09/183603
Recommended Posts