2009-06-18 82 views
0

我有一個非常簡單的圖表組件,它在x/y軸上使用整數。我的問題是我需要在此圖表上表示日期/浮點數。所以我儘管可以按比例分配比例日期。換句話說,假設我有以下日期:01/01/2008,02/01/2008和31/12/2008。該算法將返回0,16.667和100(1個月= 16.667%)。如何在Python中按比例分配比例日期

我試圖玩datetimetimedelta類的Python 2.5,我無法做到這一點。我想我可以使用蜱的數量,但我甚至無法從datetime獲得該信息。

任何想法如何我可以用Python寫這個算法?否則,任何其他想法或算法?

+1

「無法實現這個」是什麼意思?您有幾天的時間可以提供基準日期的統一增量。這是最簡單的方法。什麼沒有用?請提供具體的代碼。 – 2009-06-18 00:33:36

回答

0

我不知道我是否完全理解你正在嘗試做什麼,但是你可以將時間作爲自UNIX曆元以來的秒數來處理,然後使用普通的舊的減法來獲得可以縮放的範圍到你的情節的大小。

在處理中,map函數將爲您處理這種情況。 http://processing.org/reference/map_.html我相信你可以適應你的目的

1

把timedelta轉換成數值是相當容易的。

選擇一個新紀元時間。計算相對於時期的每個值的增量。將增量轉換爲數字值。然後像平常一樣映射數字值。

轉換非常簡單。例如:

def f(delta): 
    return delta.seconds + delta.days * 1440 * 60 + 
     (delta.microseconds/1000000.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日的比例約爲一半。