from datetime import datetime as dtimport timedef 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
演示:
>>> toYearFraction(dt.today())2011.47447514
此方法可能精确到秒(如果是夏令时或其他奇怪的区域性影响生效,则为小时)。在leap年期间也可以正常工作。如果您需要极高的分辨率(例如由于地球自转的变化),那么最好查询网络服务。



