Python 日期時間變簡單。
支援 Python 3.8 及更高版本。
>>> import pendulum>>> now_in_paris = pendulum.now('Europe/Paris')>>> now_in_paris'2016-07-04T00:49:58.502116+02:00'# 無縫時區切換>parin. ( 'UTC')'2016-07-03T22:49:58.502116+00:00'>>> 明天= pendulum.now().add(days=1)>>> last_week = pendulum.now().subtract(days=1)>>> last_week = pendulum.now().subtract( weeks =1)>>> 過去= pendulum.now().subtract(分鐘=2)>>> 過去.diff_for_ humans()'2 分鐘前'>>> delta = 過去- last_week>>> delta.hours23> >> delta.in_words(locale='en')'6 天23 小時58 分鐘'# 正確處理日期時間標準化>>> pendulum.datetime(2013, 3, 31, 2, 30, tz='Europe/Paris' )' 2013-03-31T03:30:00+02:00' # 2:30 不存在(跳過時間)# 正確處理dst 轉換>>> just_before = pendulum.datetime(2013, 3, 31, 1, 59 , 59, 999999, tz='歐洲/巴黎')'2013-03-31T01:59:59.999999+01:00'>>> just_before.add(microseconds=1)'2013-03-31T03:00:003:00 02 :00'
官方網站
文件
問題追蹤器
原生datetime
實例足以滿足基本情況,但當您面對更複雜的用例時,它們通常會顯示出限制並且使用起來不太直觀。 Pendulum
提供了更乾淨、更易於使用的 API,同時仍依賴標準庫。所以它仍然是datetime
,但更好。
與 Python 的其他日期時間庫不同,Pendulum 是標準datetime
類別(它繼承自它)的直接替代品,因此,基本上,您可以用程式碼中的DateTime
實例替換所有datetime
實例(檢查的庫存在例外)例如,使用sqlite3
或PyMySQL
等type
函數來確定物件的類型)。
它也消除了天真的日期時間的概念:每個Pendulum
實例都是時區感知的,並且預設採用UTC
以便於使用。
Pendulum 也透過提供更直觀的方法和屬性來改進標準timedelta
類別。
儘管DateTime
類是datetime
的子類,但在極少數情況下它無法直接取代本機類。以下是已報告案例的清單(非詳盡)以及可能的解決方案(如果有):
sqlite3
預設會使用type()
函數來判斷物件的類型。要解決此問題,您可以註冊一個新適配器:
從 pendulum import DateTimefrom sqlite3 import register_adapterregister_adapter(DateTime, lambda val: val.isoformat(' '))
mysqlclient
(以前的MySQLdb
)和PyMySQL
將預設使用type()
函數來確定物件的類型。要解決此問題,您可以註冊一個新適配器:
導入 MySQLdb.converters導入 pymysql.convertersfrom pendulum 導入 DateTimeMySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literalpymysql.converters.conversions[DateTime] = pymysql.converters.escapesql.converters.escapesql.converters.escapesql.converters.escapesql.converters.escapesql.converters.escapesql.converters.escapesql.converters.escapesql.converters.escapesql.converters.escapesql.converters
django
將使用isoformat()
方法將日期時間儲存在資料庫中。然而,由於pendulum
始終了解時區,因此isoformat()
始終會傳回偏移訊息,從而引發錯誤,至少對於 MySQL 資料庫而言是如此。若要解決此問題,您可以建立自己的DateTimeField
或使用先前的MySQLdb
解決方法:
from django.db.models import DateTimeField as BaseDateTimeFieldfrom pendulum import DateTimeclass DateTimeField(BaseDateTimeField):def value_to_string(self, obj):val = self.value_from_object(obue; return ' ' 如果val 是None val.isoformat()
歡迎貢獻,尤其是本地化方面的貢獻。
要使用 Pendulum 程式碼庫,您需要在本地複製專案並透過詩歌安裝所需的依賴項。
$ git克隆 [email protected]:sdispater/pendulum.git $ 詩歌安裝
如果您想幫助本地化,有兩種不同的情況:區域設定已經存在或不存在。
如果區域設定不存在,您將需要使用clock
實用程式建立它:
./clock locale create <您的區域設定>
它將在pendulum/locales
中產生一個以您的語言環境命名的目錄,其結構如下:
<您的區域設定>/
- 自訂.py
- 語言環境.py
不得修改locale.py
檔。它包含 CLDR 資料庫提供的翻譯。
custom.py
檔案是您要修改的檔案。它包含 Pendulum 所需但 CLDR 資料庫未提供的資料。你可以以en數據為參考,看看需要哪些數據。
您還應該為已建立或修改的區域設定新增測試。