如何将儒略日转换为标准日期?

9
我有一个字符串作为儒略日,如"16152"表示2016年的第152天或"15234"表示2015年的第234天。
如何使用Python 3标准库将这些儒略日转换为20/05/2016格式?
我可以这样获得2016年:date = 20 + julian[0:1],其中julian是包含儒略日的字符串,但是如何根据1月1日计算其余部分呢?

8
无关联,但是儒略日是另一回事:儒略日是天文学家主要使用的自开始儒略周期以来天数的连续计数。 - Serge Ballesta
1
反向操作:从python字符串日期中提取年份和儒略日。 - jfs
4个回答

20

.strptime() 方法支持 年中第几天 的格式:

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

然后您可以使用strftime()来重新格式化日期

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

1
能否使用一天的分数来获取时间呢? - Raksha

4

首先,创建一个datetime对象(来自于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)

现在将开始日期后的日数相加:
daysToAdd = int(julian[2:]) # Taking the days and converting to int
date += timedelta(days = daysToAdd - 1)

现在,您可以直接按原样打印它:
print(str(date))

或者你可以使用strftime()函数。

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

在此处阅读有关strftime格式字符串的更多信息


1
如果你要打印一个对象,就不必调用str函数。print函数会自动调用__str__方法。例如,只需这样:print(datetime.now())即可。 - illright

-1

我用这个来将儒略日转换为xml xsd:datetime

def julianDate2ISO8601(d, offset='+00:00'):
    """
     return ISO8601 formated datetime from julian date
     optional offset  [+|-]hh:mm
    """
    d = str(d)  # make sure it is a string
    # replace leading number with correct century
    centuryArray = ['19','20','21']
    d = centuryArray[int(d[:1])] + d[1:]
    # format string to iso 8601 datetime
    return datetime.datetime.strptime(d, '%Y%j').date().strftime(
        '%Y-%m-%dT00:00:00') + offset

-1

简单方法

  • 从常规日期转换为儒略日期

print datetime.datetime.now().strftime("%y%j")

  • 从儒略日期转换为常规日期

print datetime.datetime.strptime('19155', '%y%j').strftime("%d-%m-%Y")


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接