Konvertierung von 'year', 'day of year' und 'fractionalhour'

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PaulchenPanther
User
Beiträge: 16
Registriert: Freitag 13. Juli 2012, 17:17

Hallo zusammen,
ich möchte die drei arrays 'year', 'day' und 'hour' in ein lesbares Datumsformat umwandeln.
Das ist, was ich bisher an Code habe:

Code: Alles auswählen

year = [2012,2012,2012]
day = [2,3,4] #dabei handelt es sich um 'day of year'
hour = [12,12,12]

import datetime
import pytz

dt=list()
for i in range(len(year)):
	dt.append(datetime.datetime(year[i], day[i], hour[i],tzinfo=pytz.UTC))
dt=np.array(dt)
print dt
Der Output ist natürlich falsch, da als zweiter Input der Funktion 'datetime' die Monate erwartet werden und nicht Tage. Wie mache ich es besser?
Vermutlich würde das Modul 'timedelta' helfen. Ich bin nur gerade überfordert.
Erschwerend kommt hinzu, dass die Stunden in meinem echten Datensatz auch keine Integers sind, sondern fractional hours, die müssen eigentlich auch noch umgerechnet werden.
Kann mir jemand eine Hilfestellung geben? Dankeschön!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Man durchläuft vorzugsweise alle Listen auf einmal, beginnt am 1. Januar des angegebenen Jahres, setzt das timedelta passend und schon ist es fertig.

Code: Alles auswählen

import datetime

years = [2012, 2012, 2013]
days = [2, 3, 280] #dabei handelt es sich um 'day of year'
hours = [12, 12, 4]

for year, day, hour in zip(years, days, hours):
    date = datetime.datetime(year, 1, 1) + datetime.timedelta(days=day, hours=hour)
    print(date)
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Hallo PaulchenPanther ,

du kannst die Methode `datetime.strptime` verwenden:

Code: Alles auswählen

from datetime import datetime
date = datetime.strptime('%04d%03d%02d' % (year, doy, hour), '%Y%j%d')
Grüße
Gerrit
PaulchenPanther
User
Beiträge: 16
Registriert: Freitag 13. Juli 2012, 17:17

Vielen Dank für euere Hilfe. Mir selbst war es nicht gelungen, 'timedelta' richtig zu benutzen.
Jetzt klappt es zumindest für das angegebene Beispiel.
Antworten