How to convert Julian date to standard date?

27,227

Solution 1

The .strptime() method supports the day of year format:

>>> import datetime
>>>
>>> datetime.datetime.strptime('16234', '%y%j').date()
datetime.date(2016, 8, 21)

And then you can use strftime() to reformat the date

>>> date = datetime.date(2016, 8, 21)
>>> date.strftime('%d/%m/%Y')
'21/08/2016'

Solution 2

Well, first, create a datetime object (from the module datetime)

from datetime import datetime
from datetime import timedelta
julian = ... # Your julian datetime
date = datetime.strptime("1/1/" + jul[:2], "%m/%d/%y") 
# Just initializing the start date, which will be January 1st in the year of the Julian date (2 first chars)

Now add the days from the start date:

daysToAdd = int(julian[2:]) # Taking the days and converting to int
date += timedelta(days = daysToAdd - 1)

Now, you can just print it as is:

print(str(date))

Or you can use strftime() function.

print(date.strftime("%d/%m/%y"))

Read more about strftime format string here

Share:
27,227
abidinberkay
Author by

abidinberkay

Updated on July 09, 2022

Comments

  • abidinberkay
    abidinberkay almost 2 years

    I have a string as Julian date like "16152" meaning 152'nd day of 2016 or "15234" meaning 234'th day of 2015.

    How can I convert these Julian dates to format like 20/05/2016 using Python 3 standard library?

    I can get the year 2016 like this: date = 20 + julian[0:1], where julian is the string containing the Julian date, but how can I calculate the rest according to 1th of January?

  • illright
    illright almost 8 years
    It is unneccessary to call the str function on an object if you're printing it. The print function will call the __str__ method itself. Just this: print(datetime.now()), for example, is sufficient
  • Raksha
    Raksha over 4 years
    is it possible to do this with fractions of day to get time as well?