如何将Python日期时间日期转换为十进制/浮点数 [英] How to convert Python datetime dates to decimal/float years

查看:720
本文介绍了如何将Python日期时间日期转换为十进制/浮点数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找一种将日期时间对象转换为十进制(/浮点)年(包括小数部分)的方法。示例:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆