decimal day

7 Ansichten (letzte 30 Tage)
ricco
ricco am 4 Nov. 2011
Beantwortet: Moyo Ajayi am 24 Okt. 2019
Any ideas of how to convert year, day of year(1:365), and time (i.e. 17:59 is given as 1759) to decimal day.
I've already changed the time into hours and minutes so now have: year; day(1:365); hour(1:24); min(1:60) But how would i go about converting this to decimal day?
thanks

Antworten (5)

Walter Roberson
Walter Roberson am 4 Nov. 2011
Not taking leap-years and leap seconds in to account:
(year * 365 + day) + (hour / 24 + minute / (24*60))

Fangjun Jiang
Fangjun Jiang am 4 Nov. 2011
Year=2011;
Day=250;
Hour=23;
Minute=35;
D=datenum(Year,1,1)+Day-1;
[Year,Month,Day]=datevec(D);
D=datenum(Year,Month,Day,Hour,Minute,0)
  1 Kommentar
Walter Roberson
Walter Roberson am 4 Nov. 2011
This is probably more reliable than the version I gave.

Melden Sie sich an, um zu kommentieren.


Andrei Bobrov
Andrei Bobrov am 4 Nov. 2011
for array d
d =[ 2002 190 17 16
2003 345 7 14
2004 233 17 41
2003 350 17 51
2007 88 2 21];
out = datenum([d(:,1), zeros(size(d,1),2)])+d(:,2)+sum(bsxfun(@rdivide,d(:,3:end),[24 60]),2);

ricco
ricco am 4 Nov. 2011
All of these seem to work i.e. they give the same answer, but i though that decimal day would be given in the form of day 1.23344 etc, these values are in the range of 7.325572215277777e+05? what does this refer to?
thanks
  1 Kommentar
Fangjun Jiang
Fangjun Jiang am 4 Nov. 2011
That is the number of days since Jan 0, year 0000. See the help document of datenum, datestr, datevec. Also, try the following
datestr(0)
datestr(1)
now
datestr(now)

Melden Sie sich an, um zu kommentieren.


Moyo Ajayi
Moyo Ajayi am 24 Okt. 2019
A simple way to do this is by using dec_doy. You will not have to worry about leap year and instead. I am still working on formatting the repository, which will have more useful functions. However, for now, it should be helpful for your problem. All you need to do before hand is convert your dates into datetime objects by using the datetime() function.
Example:
>> dt = datetime(2019, 10, 23, 21, 50, 05, 123);
>> decimal_doy = dec_doy(dt)
decimal_doy =
296.9098

Kategorien

Mehr zu Dates and Time finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by