Seite 1 von 1

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

Verfasst: Dienstag 8. Oktober 2013, 01:09
von PaulchenPanther
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!

Re: Konvertierung von 'year', 'day of year' und 'fractionalh

Verfasst: Dienstag 8. Oktober 2013, 02:48
von /me
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)

Re: Konvertierung von 'year', 'day of year' und 'fractionalh

Verfasst: Dienstag 8. Oktober 2013, 02:50
von gkuhl
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

Re: Konvertierung von 'year', 'day of year' und 'fractionalh

Verfasst: Dienstag 8. Oktober 2013, 04:20
von PaulchenPanther
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.