Python datetimes ทำได้ง่าย
รองรับ Python 3.8 และใหม่กว่า
> >> import pendulum
> >> now_in_paris = pendulum . now ( 'Europe/Paris' )
> >> now_in_paris
'2016-07-04T00:49:58.502116+02:00'
# Seamless timezone switching
> >> now_in_paris . in_timezone ( 'UTC' )
'2016-07-03T22:49:58.502116+00:00'
> >> tomorrow = pendulum . now (). add ( days = 1 )
> >> last_week = pendulum . now (). subtract ( weeks = 1 )
> >> past = pendulum . now (). subtract ( minutes = 2 )
> >> past . diff_for_humans ()
'2 minutes ago'
> >> delta = past - last_week
> >> delta . hours
23
> >> delta . in_words ( locale = 'en' )
'6 days 23 hours 58 minutes'
# Proper handling of datetime normalization
> >> pendulum . datetime ( 2013 , 3 , 31 , 2 , 30 , tz = 'Europe/Paris' )
'2013-03-31T03:30:00+02:00' # 2:30 does not exist (Skipped time)
# Proper handling of dst transitions
> >> just_before = pendulum . datetime ( 2013 , 3 , 31 , 1 , 59 , 59 , 999999 , tz = 'Europe/Paris' )
'2013-03-31T01:59:59.999999+01:00'
> >> just_before . add ( microseconds = 1 )
'2013-03-31T03:00:00+02:00'
อินสแตนซ์ datetime
และเวลาแบบเนทีฟนั้นเพียงพอสำหรับกรณีพื้นฐาน แต่เมื่อคุณเผชิญกับกรณีการใช้งานที่ซับซ้อนมากขึ้น อินสแตนซ์เหล่านั้นมักจะแสดงข้อจำกัดและใช้งานไม่ได้ตามสัญชาตญาณ Pendulum
มี API ที่สะอาดกว่าและใช้งานง่ายกว่า ในขณะที่ยังคงใช้ไลบรารีมาตรฐาน ดังนั้นจึงยังคง datetime
แต่ดีกว่า
ไม่เหมือนกับไลบรารี datetime อื่นๆ สำหรับ Python Pendulum เป็นการแทนที่แบบดรอปอินสำหรับคลาส datetime
มาตรฐาน (ซึ่งสืบทอดมาจากคลาสนั้น) ดังนั้น โดยพื้นฐานแล้ว คุณสามารถแทนที่อินสแตนซ์ datetime
ทั้งหมดของคุณด้วยอินสแตนซ์ DateTime
ในโค้ดของคุณ (มีข้อยกเว้นสำหรับไลบรารีที่ตรวจสอบ ประเภทของออบเจ็กต์โดยใช้ฟังก์ชัน type
เช่น sqlite3
หรือ PyMySQL
เป็นต้น)
นอกจากนี้ยังลบแนวคิดเรื่องวันที่และเวลาไร้เดียงสาออกไป: อินสแตนซ์ Pendulum
แต่ละตัวจะรับรู้เขตเวลาและเป็นค่าเริ่มต้นใน UTC
เพื่อความสะดวกในการใช้งาน
ลูกตุ้มยังปรับปรุงคลาส timedelta
มาตรฐานด้วยการจัดหาวิธีการและคุณสมบัติที่ใช้งานง่ายยิ่งขึ้น
แม้ว่าคลาส DateTime
จะเป็นคลาสย่อยของ datetime
ก็มีบางกรณีที่หายากซึ่งไม่สามารถแทนที่คลาสเนทิฟได้โดยตรง ต่อไปนี้เป็นรายการ (โดยสังเขป) ของกรณีที่รายงานพร้อมแนวทางแก้ไขที่เป็นไปได้ (หากมี):
sqlite3
จะใช้ฟังก์ชัน type()
เพื่อกำหนดประเภทของวัตถุตามค่าเริ่มต้น หากต้องการแก้ไข คุณสามารถลงทะเบียนอะแดปเตอร์ใหม่ได้: from pendulum import DateTime
from sqlite3 import register_adapter
register_adapter ( DateTime , lambda val : val . isoformat ( ' ' ))
mysqlclient
(เดิมชื่อ MySQLdb
) และ PyMySQL
จะใช้ฟังก์ชัน type()
เพื่อกำหนดประเภทของวัตถุตามค่าเริ่มต้น หากต้องการแก้ไข คุณสามารถลงทะเบียนอะแดปเตอร์ใหม่ได้: import MySQLdb . converters
import pymysql . converters
from pendulum import DateTime
MySQLdb . converters . conversions [ DateTime ] = MySQLdb . converters . DateTime2literal
pymysql . converters . conversions [ DateTime ] = pymysql . converters . escape_datetime
django
จะใช้เมธอด isoformat()
เพื่อจัดเก็บวันที่และเวลาในฐานข้อมูล อย่างไรก็ตาม เนื่องจาก pendulum
เป็นเขตเวลาเสมอ โปรดทราบว่าข้อมูลออฟเซ็ตจะถูกส่งกลับโดย isoformat()
ทำให้เกิดข้อผิดพลาดเสมอ อย่างน้อยสำหรับฐานข้อมูล MySQL หากต้องการแก้ไข คุณสามารถสร้าง DateTimeField
ของคุณเอง หรือใช้วิธีแก้ปัญหาก่อนหน้าสำหรับ MySQLdb
: from django . db . models import DateTimeField as BaseDateTimeField
from pendulum import DateTime
class DateTimeField ( BaseDateTimeField ):
def value_to_string ( self , obj ):
val = self . value_from_object ( obj )
if isinstance ( value , DateTime ):
return value . to_datetime_string ()
return '' if val is None else val . isoformat ()
ยินดีสนับสนุนการมีส่วนร่วม โดยเฉพาะอย่างยิ่งกับการแปลเป็นภาษาท้องถิ่น
หากต้องการทำงานบนโค้ดเบสของ Pendulum คุณจะต้องโคลนโปรเจ็กต์ในเครื่องและติดตั้งการขึ้นต่อกันที่จำเป็นผ่านบทกวี
$ git clone [email protected]:sdispater/pendulum.git
$ poetry install
หากคุณต้องการความช่วยเหลือเกี่ยวกับการแปล มีสองกรณีที่แตกต่างกัน: สถานที่นั้นมีอยู่แล้วหรือไม่
หากไม่มีสถานที่นั้น คุณจะต้องสร้างมันขึ้นมาโดยใช้ยูทิลิตี้ clock
:
./clock locale create < your-locale >
มันจะสร้างไดเร็กทอรีใน pendulum/locales
ที่ตั้งชื่อตามโลแคลของคุณ โดยมีโครงสร้างดังนี้:
<สถานที่ของคุณ>/
- กำหนดเอง.py
- locale.py
ไฟล์ locale.py
จะต้องไม่ได้รับการแก้ไข ประกอบด้วยคำแปลจากฐานข้อมูล CLDR
ไฟล์ custom.py
เป็นไฟล์ที่คุณต้องการแก้ไข ประกอบด้วยข้อมูลที่จำเป็นสำหรับ Pendulum ซึ่งไม่ได้มาจากฐานข้อมูล CLDR คุณสามารถใช้ข้อมูล en เป็นข้อมูลอ้างอิงเพื่อดูว่าข้อมูลใดที่จำเป็น
คุณควรเพิ่มการทดสอบสำหรับภาษาที่สร้างหรือแก้ไข