2011-03-24 20 views
15

Ho bisogno di ottenere gli oggetti date per il primo e l'ultimo giorno dell'anno corrente.Ottieni oggetto data per il primo/ultimo giorno dell'anno corrente

Attualmente sto usando questo codice che funziona bene, ma sono curioso di sapere se c'è un modo migliore per farlo; per esempio. senza dover specificare manualmente il mese/giorno.

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

non sono sicuro che mi piacerebbe molto classifico la soluzione come una soluzione manuale; in effetti è molto più chiaro, e quindi "più bello", rispetto alle alternative che implicano tutte l'aritmetica delle date. –

+0

Penso che questo sia "bello" come avrai intenzione di ottenere. Che cosa non ti piace di questo codice? – NPE

+0

In realtà volevo sapere se c'è qualche funzione da ottenere ad es. il primo/ultimo giorno di un mese di cui non ho sentito parlare. – ThiefMaster

risposta

12

L'unico reale miglioramento che viene in mente è quello di dare le variabili nomi più descrittivo di a e b.

+0

Questi erano solo un esempio. Sto usando questi due oggetti data in una chiamata di funzione. – ThiefMaster

+0

@ThiefMaster Fiera abbastanza. Penso che contribuirebbe a suscitare buone risposte se tu descrivessi ciò che è esattamente del tuo codice che trovi poco elegante. – NPE

+2

Inoltre, non è necessario chiamare oggi() due volte, memorizzarlo in una variabile. –

1

Non c'è nulla nella libreria python ma ci sono librerie esterne che avvolgono questa funzionalità. Ad esempio, pandas ha una biblioteca timeseries, con il quale si può fare:

from datetime import date 
from pandas.tseries import offsets 

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

Mentre pandas è eccessivo se invece si è l'anno di inizio e la funzionalità di fine anno, ha anche il supporto per un sacco di altri concetti di alto livello quali giorni lavorativi, calendari, mese/trimestre/anno offset: http://pandas.pydata.org/pandas-docs/stable/timeseries.html#dateoffset-objects

1
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) 
+0

Alcuni contesti o spiegazioni potrebbero aiutare coloro che cercano questa soluzione in futuro. – Toby

Problemi correlati