Conversion of Gregorian date to decimal years

Hi,
I have time series given in gregorian time in seconds since 1992-01-01 00:00:00'. For example; 23853938,23853939...
How can i convert this gregorian time seconds to decimal years like 2010.544, 2010.545...

 Réponse acceptée

basetime = datetime('1992-01-01 00:00');
gtime = 23853938
t1 = basetime + seconds(gtime)
t2 = dateshift(t1, 'start', 'year')
t3 = dateshift(t1, 'end', 'year')
fy = year(t1) + (t1-t2)./(t3-t2)

4 commentaires

This assumes fraction of actual year, taking into account leap year, not fraction of fixed length year.
Ahmet Hakan UYANIK
Ahmet Hakan UYANIK le 10 Mai 2021
Modifié(e) : Walter Roberson le 10 Mai 2021
it is giving similar results as I did actually, what I do is;
T = datetime(1992,1,1) + seconds(gtime);
T.Format = 'yyyy-MM-dd HH:mm:ss';
dy = decyear(T)
both are correct, I guess :) Thank you in advance
decyear() appears to require the Areospace Toolbox.
Also, setting the Format is not required for decyear()
Will
Will le 18 Nov 2024
Modifié(e) : Will le 18 Nov 2024
This won't match decyear() as (t3-t2) is not the exact length of the year. decyear() calculates the fractional year as (t1-t2)/(number of hours in year or leap year).
Without the aerospace toolbox you can use:
t3 = t2 + calyears(1);
fy = year(t1) + (t1-t2)./(t3-t2)
or with dateshift(), shift to the equivalent time in the year before or after to get the correct length duration, e.g.
t3 = dateshift(t1, 'end', 'year')
t4 = dateshift(datetime(year(t1)-1,1,1), 'end' ,'year');
fy = year(t1) + (t1-t2)./(t3-t4)

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by