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期间也能正常工作.如果您需要极大的分辨率(例如由于地球自转的变化),您最好不要查询网络服务.