Python 날짜/시간이 쉬워졌습니다.
Python 3.8 이상을 지원합니다.
>>> import pendulum>>> now_in_paris = pendulum.now('Europe/Paris')>>> now_in_paris'2016-07-04T00:49:58.502116+02:00'# 원활한 시간대 전환>>> now_in_paris.in_timezone('UTC')'2016-07-03T22:49:58.502116+00:00'>>> 내일 = pendulum.now().add(days=1)>>> last_week = pendulum.now() .subtract(주=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(마이크로초=1)'2013-03-31T03:00:00+02:00'
공식 홈페이지
선적 서류 비치
이슈 트래커
기본 datetime
인스턴스는 기본적인 사례에는 충분하지만 더 복잡한 사용 사례에 직면하면 종종 한계가 나타나고 작업하기가 그리 직관적이지 않습니다. Pendulum
표준 라이브러리를 계속 사용하면서도 더욱 깔끔하고 사용하기 쉬운 API를 제공합니다. 아직 datetime
이지만 더 좋습니다.
Python의 다른 날짜/시간 라이브러리와 달리 Pendulum은 표준 datetime
클래스(여기에서 상속됨)를 즉시 대체하므로 기본적으로 모든 datetime
인스턴스를 코드의 DateTime
인스턴스로 바꿀 수 있습니다(확인하는 라이브러리에는 예외가 있음). 예를 들어 sqlite3
또는 PyMySQL
과 같은 type
함수를 사용하여 객체 유형).
또한 순진한 날짜/시간 개념을 제거합니다. 각 Pendulum
인스턴스는 시간대를 인식하며 기본적으로 사용하기 쉽도록 UTC
사용합니다.
Pendulum은 또한 보다 직관적인 방법과 속성을 제공하여 표준 timedelta
클래스를 개선합니다.
DateTime
클래스가 datetime
의 하위 클래스이더라도 네이티브 클래스를 직접 대체할 수 없는 드문 경우가 있습니다. 가능한 해결 방법이 있는 보고된 사례 목록은 다음과 같습니다(해당되는 경우).
sqlite3
기본적으로 객체의 유형을 결정하기 위해 type()
함수를 사용합니다. 이 문제를 해결하려면 새 어댑터를 등록하면 됩니다.
진자 가져오기 DateTimefrom sqlite3 가져오기 Register_adapterregister_adapter(DateTime, 람다 값: val.isoformat(' '))
mysqlclient
(이전 MySQLdb
)와 PyMySQL
기본적으로 객체의 유형을 결정하기 위해 type()
함수를 사용합니다. 이 문제를 해결하려면 새 어댑터를 등록하면 됩니다.
import MySQLdb.convertersimport pymysql.convertersfrom pendulum import DateTimeMySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literalpymysql.converters.conversions[DateTime] = pymysql.converters.escape_datetime
django
isoformat()
메소드를 사용하여 데이터베이스에 날짜/시간을 저장합니다. 그러나 pendulum
항상 시간대를 인식하므로 적어도 MySQL 데이터베이스의 경우 isoformat()
에 의해 항상 오류가 발생하여 오프셋 정보가 반환됩니다. 이 문제를 해결하려면 자체 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(obj)if isinstance(value, DateTime):return value.to_datetime_string()return ' ' val이 None이면 그렇지 않으면 val.isoformat()
특히 현지화에 대한 기여를 환영합니다.
Pendulum 코드베이스 작업을 하려면 프로젝트를 로컬로 복제하고 시를 통해 필요한 종속성을 설치해야 합니다.
$ 자식 클론 [email protected]:sdispater/pendulum.git $ 시 설치
현지화를 돕고 싶다면 두 가지 경우가 있습니다. 즉, 해당 로케일이 이미 존재하는지 여부입니다.
해당 로캘이 존재하지 않으면 clock
유틸리티를 사용하여 생성해야 합니다.
./clock locale create
pendulum/locales
에 다음과 같은 구조로 로케일 이름을 딴 디렉토리가 생성됩니다.
<사용자의 로케일>/
- custom.py
-locale.py
locale.py
파일은 수정하면 안 됩니다. 여기에는 CLDR 데이터베이스에서 제공하는 번역이 포함되어 있습니다.
custom.py
파일은 수정하려는 파일입니다. 여기에는 CLDR 데이터베이스에서 제공하지 않는 Pendulum에 필요한 데이터가 포함되어 있습니다. en 데이터를 참조하여 어떤 데이터가 필요한지 확인할 수 있습니다.
생성되거나 수정된 로케일에 대한 테스트도 추가해야 합니다.