如何用Python按比例分配日期

2024-04-27 05:13:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试图使用python2.5的datetime和{}类,但我无法实现这一点。我以为我可以使用滴答数,但我甚至无法从datetime获得这些信息。在

你知道我怎么用Python编写这个算法吗?否则,还有其他的想法或算法吗?在


Tags: 算法信息datetime图表组件整数比例
3条回答

我不知道我是否完全理解您要做什么,但是您可以只处理自UNIX纪元以来的秒数,然后使用普通的减法来获得一个范围,您可以缩放到您的绘图大小。在

在处理过程中,map函数将为您处理这种情况。http://processing.org/reference/map_.html我相信你能为你的目的修改这个

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

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

转换是直截了当的。比如:

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

如果处理的是日期,那么可以使用方法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日的比例大约是这个比例的一半。在

相关问题 更多 >