2010-10-23 52 views
2

在我的MySQL數據庫中,我的日期可追溯到1700年代中期,我需要以某種格式轉換爲類似於Unix時間格式的整數。 int的值並不重要,只要我可以從我的數據庫或用戶輸入中獲取日期並生成相同的int。我需要使用MySQL來生成數據庫端的int,並使用python來轉換用戶的日期。在1970年之前以可重複的方式在MySQL和Python中處理日期

通常,UNIX_TIMESTAMP function會在MySQL中完成此操作,但對於1970年之前的日期,它始終返回零。

TO_DAYS MySQL function,還可以工作,但我不能接受從用戶輸入的日期和使用Python作爲此功能在MySQL創建創建相同的值。

所以基本上,我需要一個像UNIX_TIMESTAMP這樣的函數,用於1700-01-01和2100-01-01之間的MySQL和Python。

換句話說,這個MySQL僞代碼:

select 1700_UNIX_TIME(date) from table; 

必須等於這個Python代碼:

1700_UNIX_TIME(date) 
+0

@約翰梅欽,我猜的一點是,我需要某種形式的中間格式的...沒有按」無論轉換結果的價值是什麼,只要我可以從MySQL和Python的日期一致地生成它。錯誤的道歉 - 漫長的一天。我會嘗試更新這個問題... – mlissner 2010-10-23 06:27:37

+0

2392323748是一個6位數的錯字? – 2010-10-23 06:52:33

+2

只是一個友好的FYI:你正在尋找的術語是確定性的。 – 2010-10-23 07:15:45

回答

2

我沒有MySQL的安裝在這裏,但是當我看這裏:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_to-days - 我看到一個示例TO_DAYS('2008-10-07')返回733687.

以下Python函數返回datetime(2008,10,7).toordinal() = 733322,比365小於365 e MySQL的輸出。

所以藉此:

from datetime import datetime 

query = '2008-10-07' 
nbOfDays = datetime.strptime(query, '%Y-%m-%d').toordinal() + 365 

,它應該爲日期1700年和2100

+0

謝謝@eumiro對此採取刺探措施。對不起,我可憐的解釋。我的問題現在應該會好一點。 – mlissner 2010-10-23 06:39:19

+0

@John - 無,OP問這個。 – eumiro 2010-10-23 14:08:36

+0

你的代碼缺少一個'import'語句,並且所需的語句不是新手想象的那樣'import datetime',而是'從datetime import datetime'...或者,使用'import datetime'然後'... datetime .datetime.strptime(...'。您是否期望OP能夠正確填寫空白? – 2010-10-24 07:16:45

2

之間在Python工作,根據你給的鏈接,

Given a date date, returns a day number (the number of days since year 0). 

mysql> SELECT TO_DAYS(950501); 
     -> 728779 
mysql> SELECT TO_DAYS('2007-10-07'); 
     -> 733321 

相應的數字:

>>> import datetime 
>>> datetime.date(1995,5,1).toordinal() 
728414 
>>> datetime.date(2007,10,7).toordinal() 
732956 

這樣的關係是:mySQL_int == Python_int + 365,您可以在其他方向上使用fromordinal類方法轉換:

>>> datetime.date.fromordinal(728779 - 365) 
datetime.date(1995, 5, 1)