78 Stimmen

Datumsobjekt für den ersten/letzten Tag des aktuellen Jahres abrufen

Ich muss mir date Objekte für den ersten und letzten Tag des laufenden Jahres.

Derzeit verwende ich diesen Code, der gut funktioniert, aber ich bin neugierig, wenn es einen schöneren Weg, es zu tun; z.B. ohne den Monat/Tag manuell angeben.

from datetime import date
a = date(date.today().year, 1, 1)
b = date(date.today().year, 12, 31)

44voto

NPE Punkte 462670

Die einzige wirkliche Verbesserung, die mir einfällt, ist, den Variablen beschreibendere Namen zu geben als a y b .

29voto

Ibrohim Ermatov Punkte 1989
from datetime import datetime

starting_day_of_current_year = datetime.now().date().replace(month=1, day=1)    
ending_day_of_current_year = datetime.now().date().replace(month=12, day=31)

11voto

Trenton Punkte 11118

Wenn Sie in der Silvesternacht so spät noch unterwegs sind und die beiden Anrufe an today() die Jahresgrenze zu überschreiten. Es ist sicherer, dies zu tun:

from datetime import date

epoch_year = date.today().year
year_start = date(epoch_year, 1, 1)
year_end = date(epoch_year, 12, 31)

9voto

danio Punkte 8241

In der Python-Bibliothek gibt es nichts, aber es gibt externe Bibliotheken, die diese Funktionalität verpacken. Zum Beispiel, pandas hat eine Zeitreihenbibliothek, mit der Sie arbeiten können:

from datetime import date
from pandas.tseries import offsets

a = date.today() - offsets.YearBegin()
b = date.today() + offsets.YearEnd()

Während pandas ist ein Overkill, wenn Sie nur die Funktionen für den Jahresanfang und das Jahresende benötigen, aber es bietet auch Unterstützung für viele andere anspruchsvolle Konzepte wie Geschäftstage, Feiertagskalender, Monats-, Quartals- und Jahresverschiebungen: http://pandas.pydata.org/pandas-docs/stable/timeseries.html#dateoffset-objects

5voto

oakaigh Punkte 36
import datetime
year = 2016
first_day_of_year = datetime.date.min.replace(year = year)
last_day_of_year = datetime.date.max.replace(year = year)
print(first_day_of_year, last_day_of_year)

duh.

Was, wenn wir den genauen Zeitpunkt des Jahresbeginns oder -endes erfahren wollen? Das ist dasselbe. Ersetzen Sie datetime.date mit datetime.datetime und schon haben Sie den ersten letzten Tag des Jahres im datetime.datetime Format.

Um das Ganze noch ausgefallener zu gestalten, wickeln Sie es in eine Funktion ein:

import datetime

def year_range(year, datetime_o = datetime.date):
    return (
        datetime_o.min.replace(year = year),
        datetime_o.max.replace(year = year)        
    )

print(year_range(2016, datetime.date))
print(year_range(2016, datetime.datetime))

Ausgabe:

(datetime.date(2016, 1, 1), datetime.date(2016, 12, 31))
(datetime.datetime(2016, 1, 1, 0, 0), datetime.datetime(2016, 12, 31, 23, 59, 59, 999999))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X