จะสร้าง DateTime ให้เท่ากับ 15 นาทีที่แล้วได้อย่างไร?


คำตอบ:


234

นำเข้าวันที่และเวลาจากนั้นสิ่งที่กำหนดเวลามายากล:

In [63]: datetime.datetime.now()
Out[63]: datetime.datetime(2010, 12, 27, 14, 39, 19, 700401)

In [64]: datetime.datetime.now() - datetime.timedelta(minutes=15)
Out[64]: datetime.datetime(2010, 12, 27, 14, 24, 21, 684435)

1
หมายเหตุใน Python 3 คุณจะต้องผ่านเขตเวลาเพื่อnow()หลีกเลี่ยงข้อผิดพลาดเกี่ยวกับการลบวันที่ออฟเซ็ตไร้เดียงสาและออฟเซ็ตที่รับรู้:datetime.datetime.now(datetime.timezone.utc)
nornagon

1
@nornagon ที่นี่ใช้ไม่ได้เลย; ไม่สำคัญว่าออบเจ็กต์วันที่เวลาจะรับรู้หรือไร้เดียงสาการลบ timedelta จะทำงานโดยไม่คำนึงถึง
Martijn Pieters


11

นี่คือสิ่งที่ต้องทำ:

datetime.datetime.now() - datetime.timedelta(minutes = 15)

timedeltas ได้รับการออกแบบมาโดยเฉพาะเพื่อให้คุณสามารถลบหรือเพิ่มเดลต้า (ความแตกต่าง) ให้กับdatetimes


7
from datetime import timedelta    
datetime.datetime.now() - datetime.timedelta(0, 900)

Actually 900 is in seconds. Which is equal to 15 minutes. `15*60 = 900`

การนำเข้าของคุณไม่ตรงกับรหัส คุณนำเข้าtimedeltaแต่ใช้datetimeแอตทริบิวต์ นำเข้าโมดูลหรือเพิ่มประเภท
Martijn Pieters

7

ฉันมีสองวิธีในการทำเช่นนั้นสำหรับนาทีและปีและชั่วโมงหากคุณต้องการดูตัวอย่างเพิ่มเติม:

import datetime
print(datetime.datetime.now())
print(datetime.datetime.now() - datetime.timedelta(minutes = 15))
print(datetime.datetime.now() + datetime.timedelta(minutes = -15))
print(datetime.timedelta(hours = 5))
print(datetime.datetime.now() + datetime.timedelta(days = 3))
print(datetime.datetime.now() + datetime.timedelta(days = -9))
print(datetime.datetime.now() - datetime.timedelta(days = 9))

ฉันได้รับผลลัพธ์ดังต่อไปนี้:

2016-06-03 16:04:03.706615
2016-06-03 15:49:03.706622
2016-06-03 15:49:03.706642
5:00:00
2016-06-06 16:04:03.706665
2016-05-25 16:04:03.706676
2016-05-25 16:04:03.706687
2016-06-03
16:04:03.706716


4

datetime.datetime.now() - datetime.timedelta(0, 15 * 60)

timedeltaคือ "การเปลี่ยนแปลงในเวลา" ใช้เวลาเป็นวันเป็นพารามิเตอร์แรกและวินาทีในพารามิเตอร์ที่สอง 15 * 60วินาทีคือ 15 นาที


1

หากคุณกำลังใช้time.time()และต้องการประทับเวลาเป็นเอาต์พุต

เพียงแค่ใช้

CONSTANT_SECONDS = 900 # time  in seconds (900 seconds = 15 min)

current_time = int(time.time())
time_before_15_min = current_time - CONSTANT_SECONDS

คุณสามารถเปลี่ยน 900 วินาทีตามเวลาที่คุณต้องการ


1

เฉพาะโค้ดด้านล่างใน Python 3.7 เท่านั้นที่ใช้ได้สำหรับฉัน

from datetime import datetime,timedelta    
print(datetime.now()-timedelta(seconds=900))

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