Reverse Reference der Python-Datums- / Zeitbibliothek

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.

Angenommener Leser

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.)

Annahme

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

API-Basisinformationen

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.

Standardmodul

Modul Erläuterung
datetimeModul Bietet Standardtypen und -operationen für Datum und Uhrzeit.
timeModul Enthält Zeitdienstprogramme auf niedriger Ebene (Systemebene).
calendarModul Es enthält hauptsächlich Dienstprogramme für Textkalender.

Erweiterungsmodul

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

Schimmel Erläuterung
datetime.date Datumsobjekt.
datetime.datetime Datums- und Uhrzeitobjekt.
datetime.time Zeitobjekt.timeNicht 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 tmBenannter 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.

naiv und bewusst (mit oder ohne Zeitzone)

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.

Erstellen Sie ein Objekt mit einem beliebigen Datum und einer beliebigen Uhrzeit

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)

Erstellen Sie ein Objekt mit dem aktuellen Datum und der aktuellen Uhrzeit

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 ().

Konvertieren Sie von der Zeichenfolge in Datum / Uhrzeit / Datum

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

Konvertieren Sie Datum / Uhrzeit / Datum in Zeichenfolge

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

Vergleichen Sie zwei Daten und Zeiten

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)

Berechnen Sie das Intervall zwischen zwei Daten und Zeiten

In Python werden die Datums- und Zeitintervalle und -unterschiede durch "timedelta" -Objekte dargestellt. (Delta bedeutet Differenz (Differenz ⇒ Δ).)

timedelta kann durch Subtrahieren von datetimes oder dates ( - 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'

Berechnen Sie die Anzahl der Monate für zwei Daten und Zeiten

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.

Zunahme / Abnahme von Datum / Datum

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)

Gegenseitige Bekehrung zwischen naiv und bewusst

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'

Konvertieren Sie 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_timetimestamp(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.

Konvertieren Sie "datetime" oder "date" in "struct_time"

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)

Generieren Sie eine Liste mit Daten / Daten

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.

Urteil des Jahres der Stagnation

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

Bool-Auswertung von Objekten, die zum Modul "datetime" gehören

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".

Berechnung der Bearbeitungszeit

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

Blinddarm

Serienbeispiel

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.'

Referenzmaterial

#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

Reverse Reference der Python-Datums- / Zeitbibliothek
Sympy Reverse Reference
Luigi Reverse Reference
Asynchrone Verarbeitung in Python: Asyncio-Reverse-Referenz
Python 3.6 E-Mail-Bibliothek
Reverse Pull Pytest
Erster Python
Python-Datumsarithmetik
Python ast Bibliothek
Python-Zeitmessung
Erster Python
Python Library Hinweis
Informationen zur Python-Referenz
Python-Referenzseite
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
Konvertieren Sie Datum und Uhrzeit in Zeitzonen in Unixtime in Python2.7
Extrahieren Sie "Nur aktuelles Datum" und "Aktuelles Datum und Uhrzeit" mit Python datetime.
Konvertieren Sie die Datumszeitzone (Zeitdifferenz) mit Python (aus Zeichenfolge).
Erstellt eine Python-Bibliothek DateTimeRange, die Zeitbereiche verarbeitet
Funktionsausführungszeit (Python)
Python-Algorithmus Handelsbibliothek
Pandas Reverse Memo
Datumsmanipulation in Python
Python-Zeitreihenfrage
Installieren einer externen Bibliothek für Python
Ausführungszeit für Python ausgeben
[Python2] Datumszeichenfolge → UnixTime → Datumszeichenfolge
Timefloor-Funktion (Python)
Python-Optimierungsbibliothek Pulp
[Python3] Ermittelt die Datumsdifferenz
Holen Sie sich Datum in Python
Berechnen Sie das Datum mit Python
Holen Sie sich ein Date mit Python
[Python] Teilen Sie das Datum
Strings in Python umkehren
Berechnen Sie Daten in Python
Python Aktuelle Zeit abrufen
[Python] Erstellen Sie eine Datums- und Zeitliste für einen bestimmten Zeitraum
Holen Sie sich das aktuelle Datum und die aktuelle Uhrzeit in Python unter Berücksichtigung des Zeitunterschieds
Reverse Pull Numpy / Pandas (wird jederzeit aktualisiert)