如何使用Python按比例分配日期

时间:2009-06-18 00:13:17

标签: python algorithm datetime timedelta

我有一个非常简单的图表组件,它在x / y轴上取整数。我的问题是我需要在此图表上表示日期/浮动。所以我虽然可以按比例分配比例日期。换句话说,假设我有以下日期:01/01 / 2008,02 / 01/2008和31/12/2008。该算法将返回0,16.667和100(1个月= 16.667%)。

我尝试使用Python 2.5的datetimetimedelta类,但我无法实现这一点。我以为我可以使用滴答数,但我甚至无法从datetime获得该信息。

知道如何用Python编写这个算法吗?否则,还有其他想法或算法吗?

3 个答案:

答案 0 :(得分:3)

如果您正在处理日期,则可以使用方法toordinal

import datetime

jan1=datetime.datetime(2008,1,1)
dec31=datetime.datetime(2008,12,31)
feb1=datetime.datetime(2008,02,01)

dates=[jan1,dec31,feb1]
dates.sort()

datesord=[d.toordinal() for d in dates]
start,end=datesord[0],datesord[-1]

def datetofloat(date,start,end):
    """date,start,end are ordinal dates
    ie Jan 1 of the year 1 has ordinal 1
       Jan 1 of the year 2008 has ordinal 733042"""
    return (date-start)*1.0/(end-start)

print datetofloat(dates[0],start,end)
  0.0
print datetofloat(dates[1],start,end)
  0.0849315068493*
print datetofloat(dates[2],start,end)
  1.0

* 16.67%是一年两个月左右,因此2月1日的比例约为其一半。

答案 1 :(得分:1)

将timedelta转换为数值非常容易。

选择纪元时间。计算相对于纪元的每个值的增量。将delta转换为数值。然后像往常一样映射数值。

转换很简单。类似的东西:

def f(delta):
   return delta.seconds + delta.days * 1440 * 60 + 
      (delta.microseconds / 1000000.0)

答案 2 :(得分:0)

我不知道我是否完全理解你要做的事情,但你可以把时间作为自UNIX时代以来的秒数来处理,然后只使用普通的旧减法来获得你可以扩展到的范围你的情节大小。

在处理中,map函数将为您处理此案例。 http://processing.org/reference/map_.html我相信你可以根据自己的目的进行调整