Convert date to specific format julian date

17 views (last 30 days)
Need to convert calendar date to Julian date in a specific format (YYDDD). Ex: Day = (2016-05-04,2016-08-24,2016-12-31) J-Day = (16125,16237,16366)
Any help would be appreciated. Thanks.

Accepted Answer

Gareth Thomas
Gareth Thomas on 3 Oct 2016
Datetime works nicely. I believe it came out in R2014b.
a = datetime('2016-05-04');
a.Format='yyddd'
  4 Comments
Peter Perkins
Peter Perkins on 3 Oct 2016
If you are looking to get a string, Gareth was on the right track, just off by case:
>> a = datetime('2016-05-04')
a =
datetime
04-May-2016
>> char(a,'yyDDD')
ans =
'16125'
Of course, the whole point of datetime is to not have to convert between representations all the time, so perhaps
>> a.Format='yyDDD'
a =
16125
would serve as well. If you want a number, then your accepted answer is the way to go.
Charlie Wood
Charlie Wood on 4 Oct 2016
Edited: Charlie Wood on 4 Oct 2016
Peter/Gareth, this is perfect. Switching the ddd to DDD was the fix needed in the a.Format.
>> a = datetime('2016-05-04');
>> a.Format='yyDDD'
a =
16125
This works for any year as well which is great. This will be new accepted answer vice the numerical version I put up.
Thanks a gain for the help!

Sign in to comment.

More Answers (4)

Steven Lord
Steven Lord on 3 Oct 2016
Create a datetime array from the char vectors containing the yyyy-MM-dd form of the dates. Use the juliandate function to compute the Julian date from the datetime array.
  1 Comment
Charlie Wood
Charlie Wood on 3 Oct 2016
Edited: Charlie Wood on 3 Oct 2016
d = '2016-12-31';
dt = datetime(d)
dt = 31-Dec-2016
j = juliandate(dt)
j = 2.4578e+06
How do I get j into the yyddd format (to read 16366)?
Thanks.

Sign in to comment.


Michael C.
Michael C. on 3 Oct 2016
My understanding was that Julian usually referred to the number of days since Jan 1 4713 BC, but judging by your example, you are using March 11th, 1972.
Either way, you can get number of days by doing a subtraction on two "datenum"s
datenum([2016 08 24 0 0 0]) - datenum([1972 3 11 0 0 0])
which gives the 16237. Passing in a string for the date will also work.
  1 Comment
Charlie Wood
Charlie Wood on 3 Oct 2016
This worked pretty effectively. Unfortunately if I have a date from 2015 or 2014 (which I do), it doesn't work as well. I guess I can put an if statement in there to switch the second datenum to the right value. Thanks so much Michael.

Sign in to comment.


Charlie Wood
Charlie Wood on 3 Oct 2016
Here's what I got combining some answers:
d = '2016-05-04';
dt = datime(d);
jday = (year(dt)-2000)*1000 + day(dt,'dayofyear')
The answer comes out with 16125. It's not pretty and not useful for dates before the year 2010 (maybe with some minor formatting it would be ok for 2000-2009). It does however work for my 2014-2016 dates so far.
Thanks to everyone for the help and input!!!

Ankit Kanthe
Ankit Kanthe on 3 Oct 2016
Here's what I got combining some answers:
d = '2016-05-04'; dt = datime(d); jday = (year(dt)-2000)*1000 + day(dt,'dayofyear') The answer comes out with 16125. It's not pretty and not useful for dates before the year 2010 (maybe with some minor formatting it would be ok for 2000-2009). It does however work for my 2014-2016 dates so far.

Categories

Find more on Dates and Time in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!