ความแตกต่างระหว่าง Python datetime เทียบกับโมดูลเวลา


137

ฉันกำลังพยายามหาความแตกต่างระหว่างโมดูลdatetimeและtimeโมดูลและแต่ละโมดูลควรใช้สำหรับอะไร

ฉันรู้ว่าdatetimeมีทั้งวันที่และเวลา ใช้timeโมดูลอะไร?

ตัวอย่างจะได้รับการชื่นชมและความแตกต่างเกี่ยวกับเขตเวลาจะเป็นที่สนใจเป็นพิเศษ

คำตอบ:


102

timeโมดูลเป็นหลักสำหรับการทำงานกับยูนิกซ์แสตมป์เวลา แสดงเป็นตัวเลขทศนิยมที่ใช้เวลาเป็นวินาทีนับตั้งแต่ยุคยูนิกซ์ datetimeโมดูลสามารถรองรับจำนวนมากของการดำเนินงานเดียวกัน แต่มีเชิงวัตถุชุดอื่น ๆ ประเภทและยังมีการสนับสนุนที่ จำกัด สำหรับโซนเวลา


22
นอกจากนี้อะไรคือความแตกต่างระหว่างtimeและdatetime.time?
SparkAndShine

จะเป็นการดีที่จะให้รายละเอียดคุณสมบัติเช่นถ้าเป็นเรียลไทม์ / โมโนโทนิค เช่นเดียวกับในมาตรฐาน POSIX คุณมี: CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_THREAD ฯลฯ ... บนนาฬิกา POSIX โปรดดู: stackoverflow.com/questions/3523442/…
Vajk Hermecz

12

ติดเพื่อtimeป้องกันความไม่ชัดเจนของ DST

ใช้เฉพาะระบบtimeโมดูลแทนของdatetimeโมดูลที่จะป้องกันไม่ให้ปัญหาความคลุมเครือกับกลางวันเวลาออมทรัพย์ (DST)

การแปลงเป็นรูปแบบเวลาใดก็ได้รวมถึงเวลาท้องถิ่นนั้นค่อนข้างง่าย:

import time
t = time.time()

time.strftime('%Y-%m-%d %H:%M %Z', time.localtime(t))
'2019-05-27 12:03 CEST'

time.strftime('%Y-%m-%d %H:%M %Z', time.gmtime(t))
'2019-05-27 10:03 GMT'

time.time()คือตัวเลขทศนิยมที่แสดงเวลาเป็นวินาทีตั้งแต่ยุคระบบ time.time()เหมาะอย่างยิ่งสำหรับการประทับเวลาที่ชัดเจน

หากระบบเรียกใช้โปรโตคอลเวลาเครือข่าย (NTP)เพิ่มเติมระบบจะจบลงด้วยฐานเวลาที่ค่อนข้างมั่นคง

นี่คือเอกสารของtimeโมดูล


ในตัวอย่างของคุณคุณใช้time.localtime()ซึ่งแน่นอนว่ามี DST อยู่ในตัวถ้าเราจะเป็นคนเจ้าระเบียบเราไม่ควรใช้time.gmtime()แทนหรือ? :)
Seamus

@Seamus เพียงทดสอบคำสั่งทั้งสองในipythonรายการที่time.gmtime()ให้ค่าทูเพิลในขณะที่time.time()ให้เวลาUNIX epochเป็นค่าทศนิยมเดี่ยวของวินาทีที่ผ่านไปตั้งแต่ 00:00:00 UTC วันพฤหัสบดีที่ 1 มกราคม 1970 ฟังก์ชันtime.localtime(t)จะแปลงเวลายุคเป็นท้องถิ่น เวลาทูเพิล ดังนั้นคำตอบสำหรับคำถามของคุณคือ«ไม่»
Serge Stroobandt

มีวิธีเพิ่มวันให้กับวัตถุเวลาหรือไม่? ด้วย datetime มีวิธี timedelta (วัน = 6)
Nehemias Herrera

@NehemiasHerrera t = time.time()เป็นตัวเลขจุดลอยตัวที่แสดงเวลาเป็นวินาทีตั้งแต่ยุคระบบ ดังนั้นเราสามารถเพิ่มหรือทดแทน 86400 วินาทีทุกวัน t += 86400
Serge Stroobandt

5

โมดูลเวลาสามารถใช้เมื่อคุณต้องการเวลาในการบันทึกเฉพาะเช่นสมมติว่าคุณมีตาราง / ไฟล์แยกต่างหากสำหรับการทำธุรกรรมในแต่ละวันจากนั้นคุณก็ต้องใช้เวลา อย่างไรก็ตามประเภทข้อมูลเวลามักจะใช้เพื่อเก็บความแตกต่างของเวลาระหว่างจุดเวลา 2 จุด

นอกจากนี้ยังสามารถทำได้โดยใช้วันที่และเวลา แต่ถ้าเราจัดการกับเวลาของวันใดวันหนึ่งเท่านั้นโมดูลเวลาก็สามารถใช้ได้

Datetime ใช้เพื่อจัดเก็บข้อมูลและเวลาเฉพาะสำหรับเรกคอร์ด เช่นเดียวกับในหน่วยงานให้เช่า วันที่ครบกำหนดจะเป็นประเภทข้อมูลวันที่และเวลา


3

หากคุณสนใจในเขตเวลาคุณควรพิจารณาการใช้ pytz


8
ดูเหมือนว่าคุณจะสนใจโมดูลเวลาและวันเวลาและความแตกต่างของเขตเวลาระหว่างกันมากที่สุด ด้วยความเคารพทั้งหมดการนำการพึ่งพาอื่นเข้ามาในสิ่งนี้ค่อนข้างไม่เกี่ยวข้อง
sbartell

3
การสนับสนุนเขตเวลาทั้งในโมดูลเวลาและวันเวลานั้นแย่มาก ... ถ้าเขาสนใจที่จะจัดการเขตเวลาอย่างมีประโยชน์อย่างแท้จริงเขาก็ควรรู้เกี่ยวกับ pytz คุณนำการพึ่งพามาเพื่อแก้ปัญหาที่การอ้างอิงในปัจจุบันของคุณไม่ได้ช่วยคุณแก้ปัญหาของคุณ ...
donkopotamus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.