2017-05-25 54 views
2

我有一個龐大的數據庫,其中包括「發佈時間」字段。在Python中排序日期

該字段包含的值,例如:2天前,3個月前,5分鐘前...

我可以排序它其中涉及首先觀察第二個參數(日,月,分艱難地),然後查看數字的第一個參數。

我想知道是否有更好的方法?

+2

您的巨大數據庫中沒有時間戳列嗎? –

+2

'python'或'sql' ??? – Praveen

+6

您的數據庫包含字符串值「2天前」... ?!從長遠來看,這不是非常有用,是嗎? – deceze

回答

4

正如其中一條評論所述,請重新考慮更改數據庫結構(或至少本專欄)。只要你可以將它與某個固定的時間點聯繫起來(這意味着 - 你有某種'絕對'價值,比如紀元時間),比較日期的整點就是有意義的。

如果你不能夠在數據庫設計工作,或有用於該模式的一些不起眼的目的,你已經可以查詢現有的PIP封裝:

https://pypi.python.org/pypi/dateparser

從包文檔:

功能

  • 對英語,西班牙語,荷蘭語,俄語和20多個日期的通用分析其他語言加上衆多格式,語言 不可知論的時尚。
  • 通用解析相對日期,如'1分鐘前','2周前','3個月,1周和1天前','2天內','明天'。
  • 日期的通用解析與時區縮寫或類似UTC偏移: '2015年8月14日美國東部時間', '2013年7月4日太平洋標準時間','21月
    2013晚上10:15 0500' 。

  • 支持非格里曆日曆系統。請參閱支持的日曆。

  • 廣泛的測試覆蓋率。
+0

這是一個非常好的答案。我特別喜歡你如何強調日期應該是絕對的,如果可以幫助的話,但至少提供一個轉換相對日期的機會。 – mike

+0

聽起來不錯,我會看看這個包。這個值「x時間前」是以字符串的形式給出的,因此就數據庫而言我沒有太多可以做的事情。謝謝 –

1

這些模糊值「xy's ago」顯然是從一些原始源數據計算得到的顯示值。 您是否從某些API採購這些數據?

您應該嘗試將這些顯示值背後的原始數據源。也許你從這些記錄中獲取這些記錄的「龐大數據庫」可以以返回日期絕對值的方式查詢,而不是這些模糊的數據庫。 (作爲旁白,我發現目前使用所謂人性化模糊日期戳的趨勢非常煩人,尤其是當您無法關閉它們時,它不僅會影響屏幕抓取應用程序,似乎是,但這對時間關鍵型數據(如帶日期戳記票據的票務系統)來說確實是一個障礙,我期待看到這種UI趨勢的減弱)。

+2

「1分鐘前回答」 – Uriel

+0

@Uriel實際上大聲笑! :D – mike

+1

這種趨勢並非出於人類友好的原因,這是由於所謂的大數據收集者*(社交網絡等)不想與世界分享他們的麪包和黃油 - 數據本身。在自動抓取機上做得越困難,從他們的角度來看就越好。 – zwer