如何将Python日期时间日期转换为十进制/浮点数 [英] How to convert Python datetime dates to decimal/float years
问题描述
我正在寻找一种将日期时间对象转换为十进制(/浮点)年(包括小数部分)的方法。示例:
I am looking for a way to convert datetime objects to decimal(/float) year, including fractional part. Example:
>>> obj = SomeObjet()
>>> obj.DATE_OBS
datetime.datetime(2007, 4, 14, 11, 42, 50)
如何将 datetime.datetime(2007,4,14,14,11,42,50)
转换为十进制年份?从这种格式 dd / mm / yyyy
到这种格式 yyyy.zzzz
How do I convert datetime.datetime(2007, 4, 14, 11, 42, 50)
to decimal years? From this format dd/mm/yyyy
to this kind of format yyyy.zzzz
(注意:在统计建模中(例如用于线性回归),这称为 时间指数 )
(NOTE: in statistical modeling (e.g. for linear regression), this is called "time index")
推荐答案
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
演示:
>>> toYearFraction(dt.today())
2011.47447514
秒(如果实行夏令时或其他奇怪的地区性措施,则为小时)。在leap年期间也可以正常工作。如果您需要大幅度的分辨率(例如由于地球自转的变化),那么最好查询网络服务。
This method is probably accurate to within the second (or the hour if daylight savings or other strange regional things are in effect). It also works correctly during leapyears. If you need drastic resolution (such as due to changes in the Earth's rotation) you are better off querying a net service.
这篇关于如何将Python日期时间日期转换为十进制/浮点数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!