0

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

我尝试使用 Python 2.5 的datetimetimedelta类,但我无法实现这一点。我以为我可以使用刻度数,但我什至无法从datetime.

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

4

3 回答 3

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 日的比例大约是该比例的一半。

于 2009-06-18T00:51:12.480 回答
1

将 timedelta 转换为数值相当容易。

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

转换是直截了当的。就像是:

def f(delta):
   return delta.seconds + delta.days * 1440 * 60 + 
      (delta.microseconds / 1000000.0)
于 2009-06-18T00:37:20.293 回答
0

我不知道我是否完全理解您要做什么,但是您可以处理自 UNIX 时代以来的秒数,然后只需使用普通的旧减法即可获得一个可以缩放到大小的范围你的阴谋。

在处理过程中,map 函数将为您处理这种情况。 http://processing.org/reference/map_.html 我相信您可以根据自己的目的进行调整

于 2009-06-18T00:26:47.130 回答