2016-07-21 28 views
2

Ich arbeite mit CMIP5-Daten, die Zeiteinheiten von "Tagen seit 1-1-1850" haben. Um den aktuellen Tag zu finden, mit dem ich in der Datei arbeite, würde ich normalerweise einen timedelta-Zusatz von 1-1-1850 und den Zeitwert (in Tagen) für den Datenpunkt, mit dem ich arbeite, machen. CMIP5 (oder zumindest die Datei, die ich verwende) verwendet jedoch einen 'noleap' Kalender, was bedeutet, dass alle Jahre nur 365 Tage sind.Python-Timedelta-Arithmetik mit noleap-Kalendern

In meinem aktuellen Fall, wenn ich den Datenpunkt behandle, der dem 1. Januar 1980 entspricht, füge ich sein Zeitargument von 47450 Tagen zum ursprünglichen Datum vom 1. Januar 1850 hinzu. Ich bekomme jedoch eine Antwort vom 1. Dezember zurück , 1979, weil alle 29. Februar zwischen 1850 und 1980 ausgeschlossen sind. Gibt es ein zusätzliches Argument in timedelta oder datetime im Allgemeinen, das sich auf Kalender bezieht, die Schalttage ausschließen?

Antwort

4

netCDF num2date ist die Funktion, die Sie suchen:

import netCDF4 

ncfile = netCDF4.Dataset('./foo.nc', 'r') 
time = ncfile.variables['time'] # note that we do not cast to numpy array yet 
time_convert = netCDF4.num2date(time[:], time.units, time.calendar) 

Beachten Sie, dass die CMIP5 Modelle, keine Standard-Kalender haben so die time.calendar Argument wichtig sind, wenn diese Konvertierung.

+1

So ein nützliches Werkzeug, von dem ich keine Ahnung hatte. Danke, @ N1B4! – DJV