python如何将日期时间日期转换为十进制年份

use*_*807 11 python datetime date

我正在寻找一种方法将datetime对象转换为十进制年份.以下是一个例子

>>> obj = SomeObjet()
>>> obj.DATE_OBS
datetime.datetime(2007, 4, 14, 11, 42, 50)
Run Code Online (Sandbox Code Playgroud)

如何将datetime.datetime(2007,4,14,11,42,50)转换为十进制年?从这种格式dd/mm/yyyy到这种格式yyyy.yyyy

nin*_*cko 27

from datetime import datetime as dt
import time

def toYearFraction(date):
    def sinceEpoch(date): # returns seconds since epoch
        return time.mktime(date.timetuple())
    s = sinceEpoch

    year = date.year
    startOfThisYear = dt(year=year, month=1, day=1)
    startOfNextYear = dt(year=year+1, month=1, day=1)

    yearElapsed = s(date) - s(startOfThisYear)
    yearDuration = s(startOfNextYear) - s(startOfThisYear)
    fraction = yearElapsed/yearDuration

    return date.year + fraction
Run Code Online (Sandbox Code Playgroud)

演示:

>>> toYearFraction(dt.today())
2011.47447514
Run Code Online (Sandbox Code Playgroud)

这种方法可能精确到秒(或如果夏令时或其他奇怪的区域事物有效).它在leapyears期间也能正常工作.如果您需要极大的分辨率(例如由于地球自转的变化),您最好不要查询网络服务.