วิธีรับเวลาปัจจุบันใน Python


2888

โมดูล / วิธีใช้ในการรับเวลาปัจจุบันคืออะไร?


โปรดทราบว่าคำตอบที่ได้รับการโหวตมากที่สุดคือเวลา datazoe- ไร้เดียงสาในขณะที่เราเห็นว่าในสภาพแวดล้อมการผลิตบริการมากขึ้นทั่วโลกมีการเชื่อมต่อกันและเวลาที่ตระหนักถึงเขตเวลากลายเป็นมาตรฐานที่จำเป็น
Sławomir Lenart

คำตอบ:


3049

ใช้:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2009, 1, 6, 15, 8, 24, 78915)

>>> print(datetime.datetime.now())
2009-01-06 15:08:24.789150

และเพียงแค่เวลา:

>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)

>>> print(datetime.datetime.now().time())
15:08:24.789150

ดูเอกสารประกอบสำหรับข้อมูลเพิ่มเติม

หากต้องการบันทึกการพิมพ์คุณสามารถนำเข้าdatetimeวัตถุจากdatetimeโมดูล:

>>> from datetime import datetime

จากนั้นนำผู้นำdatetime.ทั้งหมดที่กล่าวมา


25
มันจะดีถ้าคำตอบนี้ครอบคลุมเขตเวลา (อาจเป็น UTC เป็นตัวอย่าง) และอาจเริ่มต้นด้วย time.time ()
Greg Lindahl

4
@Toskan รูปแบบไม่ใช่ส่วนหนึ่งของคำถามดังนั้นจึงไม่ควรเป็นส่วนหนึ่งของคำตอบ มีลิงก์สำหรับเอกสารเพิ่มเติมของโมดูลที่มีสิ่งต่าง ๆ เช่นการจัดรูปแบบอยู่แล้ว
JiyuuSensei

Python รุ่นใดที่ได้รับคำตอบดั้งเดิม เพียงพิมพ์datetime.datetime.now()ในคอนโซลการโต้ตอบ Python 2.7 (IronPython ยังไม่ได้อัปเดต) ทำให้ฉันมีพฤติกรรมเช่นเดียวกับตัวอย่างใหม่ที่ใช้print()ในคำตอบ ฉันยังทำซ้ำไม่สำเร็จสิ่งที่คำตอบเดิมแสดง (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)) (ไม่ใช่ว่าฉันต้องการจริงๆพฤติกรรมการพิมพ์ () เป็นที่ต้องการ แต่ฉันอยากรู้อยากเห็น)
RTHarston

@BVVicktor: Python 2.7, 3.7 และ 3.8 ทั้งหมดมีพฤติกรรมเหมือนกันสำหรับฉันไม่แน่ใจว่าสิ่งที่คุณเห็น
Harley Holcombe

@HarleyHolcombe อืม ... มันอาจจะเป็นสิ่งที่ IronPython? เมื่อฉันพิมพ์datetime.now()ด้วยตัวเองมันจะพิมพ์ออกมาเหมือนกันกับที่คำตอบของคุณแสดงให้เห็นprint(datetime.now())...
RTHarston

955

คุณสามารถใช้time.strftime():

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'

48
นี่ / ดีกว่าคำตอบของ @ ParaMeterz ด้านล่างหรือไม่ ทำไมเราควรใช้timeโมดูลกับdatetimeโมดูล?
นาธาน

3
มันไม่ส่งคืนชั่วโมงปัจจุบันของคอมพิวเตอร์ของฉัน
Saeed

5
นี่คือเวลา UTC ซึ่งแตกต่างจากโมดูลวันที่และเวลา
Voyager

5
@Saeed: ใช้ฟังก์ชั่นlocaltime()แทนการgmtime()รับเวลาท้องถิ่นของคุณ
Jeyekomon

3
@frank ดูคำถามที่เกี่ยวข้องบนเทียบกับdatetime time
Packard CPW

621
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')

สำหรับตัวอย่างนี้ผลลัพธ์จะเป็นดังนี้: '2013-09-18 11:16:32'

นี่คือรายการของคำสั่งstrftime


456

คล้ายกับคำตอบของ Harleyแต่ใช้str()ฟังก์ชั่นสำหรับรูปแบบที่อ่านง่ายและสกปรกมากกว่ามนุษย์เล็กน้อย:

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'

13
ทั้งหมดที่ขอคือการรับเวลาปัจจุบันไม่แสดง
pppery

@ppperry แล้วเพียงแค่กำหนดตัวแปรเพื่อคำตอบของเรย์ - ที่ชอบ: MyTime = STR (datetime.now ())
Lukas

2
ไม่เกี่ยวข้อง ขั้นตอน "str" ​​ไม่ได้อยู่ในขอบเขตของคำถาม
pppery

4
@pppery หรือ op บอกว่ามันไม่เกี่ยวกับการรับสาย op ไม่ได้พูดถึงสิ่งที่พวกเขาต้องการทำกับเวลาดังนั้นทำไมมันจึงเป็นสิ่งที่ไม่ดีที่จะแสดงวิธีเปลี่ยนมันให้เป็นสตริง? คำตอบส่วนใหญ่พูดคุยเกี่ยวกับการรับสายจากเวลาดังนั้นมันดูเหมือนจะเป็นกรณีการใช้งานทั่วไปดังนั้นทำไมคำตอบเดียวของเรย์? สิ่งที่ใช้คือการได้รับเวลาโดยไม่รู้ว่าจะทำอย่างไรอะไรกับมันได้บ้าง คุณสามารถพิมพ์หรือทำคณิตศาสตร์กับมันและมีคำตอบเพียงไม่กี่คำเท่านั้นที่แสดงให้เห็นถึงวิธีการคำนวณทางคณิตศาสตร์ดังนั้นฉันคิดว่าการพิมพ์ / การรับสตริงเป็นการใช้งานทั่วไป ;-) (ฉันรู้ว่ามันคือสิ่งที่ฉันมา)
RTHarston

1
ความจริงที่ว่าคำตอบนี้มีมากกว่า 440 upvotes แสดงให้เห็นว่าการเพิ่มเล็กน้อยของวิธีการสตริงเป็นประโยชน์กับคนจำนวนมาก
John

360

ฉันจะรับเวลาปัจจุบันใน Python ได้อย่างไร

timeโมดูล

timeโมดูลให้ฟังก์ชั่นที่บอกเราได้ตลอดเวลาใน "วินาทีตั้งแต่ยุค" รวมถึงสาธารณูปโภคอื่น ๆ

import time

เวลาของยุคยูนิกซ์

นี่คือรูปแบบที่คุณควรใช้เพื่อบันทึกเวลาในการบันทึกในฐานข้อมูล เป็นเลขทศนิยมที่สามารถแปลงเป็นจำนวนเต็มได้ นอกจากนี้ยังเป็นสิ่งที่ดีสำหรับการคำนวณทางคณิตศาสตร์ในไม่กี่วินาทีเนื่องจากมันแสดงถึงจำนวนวินาทีตั้งแต่ 1 มกราคม 1970 00:00:00 และเป็นแสงหน่วยความจำที่เกี่ยวข้องกับการเป็นตัวแทนอื่น ๆ ของเวลาที่เราจะดูต่อไป:

>>> time.time()
1424233311.771502

เวลาประทับนี้ไม่ได้พิจารณาสำหรับวินาทีกระโดดดังนั้นจึงไม่ใช่เชิงเส้น - วินาทีวินาทีจะถูกข้าม ดังนั้นแม้ว่าจะไม่เทียบเท่ากับมาตรฐาน UTC สากล แต่ก็ใกล้เคียงดังนั้นจึงค่อนข้างดีสำหรับกรณีส่วนใหญ่ของการเก็บบันทึก

อย่างไรก็ตามนี่ไม่เหมาะสำหรับการตั้งเวลาของมนุษย์ หากคุณมีเหตุการณ์ในอนาคตที่คุณต้องการที่จะเกิดขึ้นในช่วงเวลาหนึ่งคุณจะต้องการเก็บเวลานั้นด้วยสตริงที่สามารถแยกวิเคราะห์ลงในวัตถุ datetime หรือวัตถุ datetime อนุกรม (สิ่งเหล่านี้จะอธิบายในภายหลัง)

time.ctime

คุณยังสามารถแสดงเวลาปัจจุบันตามที่ระบบปฏิบัติการของคุณต้องการ (ซึ่งหมายความว่ามันสามารถเปลี่ยนแปลงได้เมื่อคุณเปลี่ยนการตั้งค่าระบบของคุณดังนั้นอย่าพึ่งพาสิ่งนี้ให้เป็นมาตรฐานในทุกระบบตามที่ฉันเห็นคนอื่นคาดหวัง) . โดยทั่วไปจะเป็นมิตรกับผู้ใช้ แต่โดยทั่วไปแล้วจะไม่ส่งผลให้เกิดสตริงที่เรียงลำดับตามลำดับเวลา:

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

คุณสามารถชุ่มชื้น timestamps ลงในแบบฟอร์มการอ่านของมนุษย์ด้วยctimeเช่นกัน:

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

การแปลงนี้ยังไม่ดีสำหรับการเก็บบันทึก (ยกเว้นในข้อความที่จะแยกวิเคราะห์โดยมนุษย์ - และด้วยการปรับปรุงการรู้จำอักขระด้วยแสงและปัญญาประดิษฐ์ที่ปรับปรุงแล้วฉันคิดว่าจำนวนของกรณีเหล่านี้จะลดน้อยลง)

datetime โมดูล

datetimeโมดูลยังเป็นประโยชน์มากที่นี่:

>>> import datetime

datetime.datetime.now

datetime.nowเป็นวิธีการเรียนที่ส่งกลับเวลาปัจจุบัน มันใช้ข้อมูลที่time.localtimeไม่มีเขตเวลา (หากไม่ได้รับมิฉะนั้นให้ดูเขตเวลาที่ทราบด้านล่าง) มันมีการแสดง (ซึ่งจะช่วยให้คุณสร้างวัตถุที่เทียบเท่า) สะท้อนบนเปลือก แต่เมื่อพิมพ์ (หรือบีบอัดเพื่อ a str) มันอยู่ในรูปแบบที่มนุษย์สามารถอ่านได้ (และเกือบ ISO) และการเรียงลำดับพจนานุกรมจะเทียบเท่ากับ เรียงลำดับเหตุการณ์:

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

วันที่และเวลาของ utcnow

คุณสามารถรับวัตถุ datetime ในเวลา UTC ซึ่งเป็นมาตรฐานสากลโดยทำสิ่งนี้:

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

UTC เป็นมาตรฐานเวลาที่เกือบเทียบเท่ากับเขตเวลา GMT (แม้ว่า GMT และ UTC จะไม่เปลี่ยนแปลงตามเวลาออมแสงผู้ใช้อาจเปลี่ยนไปใช้โซนเวลาอื่น ๆ เช่น British Summer Time ในช่วงฤดูร้อน)

เขตเวลา datetime ทราบ

อย่างไรก็ตามไม่มีวัตถุ datetime ที่เราสร้างขึ้นเพื่อให้สามารถแปลงเป็นเขตเวลาต่างๆได้อย่างง่ายดาย เราสามารถแก้ปัญหานั้นได้ด้วยpytzโมดูล:

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

เทียบเท่าใน Python 3 เรามีtimezoneคลาสที่มีtimezoneอินสแตนซ์utc แนบอยู่ซึ่งทำให้เขตเวลาของวัตถุทราบ (แต่จะแปลงเป็นเขตเวลาอื่นโดยไม่มีpytzโมดูลที่ใช้งานง่ายเหลือไว้เพื่อการออกกำลังกายไปยังผู้อ่าน):

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

และเราเห็นว่าเราสามารถแปลงเป็นเขตเวลาจากวัตถุ utc ดั้งเดิมได้อย่างง่ายดาย

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

คุณยังสามารถทำให้วัตถุไร้เดียงสาวันที่และpytzเวลาทราบด้วยlocalizeวิธีการเขตเวลาหรือโดยการแทนที่แอตทริบิวต์ tzinfo (ด้วยreplaceสิ่งนี้จะทำสุ่มสี่สุ่มห้า) แต่สิ่งเหล่านี้เป็นวิธีสุดท้ายมากกว่าแนวทางปฏิบัติที่ดีที่สุด:

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

pytzโมดูลที่ช่วยให้เราเพื่อให้เราdatetimeวัตถุเขตตระหนักและแปลงครั้งไปหลายร้อยเขตเวลาที่มีอยู่ในpytzโมดูล

เราสามารถทำให้วัตถุนี้ต่อเนื่องเป็นเวลา UTC และจัดเก็บสิ่งนั้นได้อยู่ในฐานข้อมูล แต่มันจะต้องมีหน่วยความจำมากขึ้นและมีแนวโน้มที่จะเกิดข้อผิดพลาดมากกว่าเพียงแค่การจัดเก็บในเวลา Unix Epoch ซึ่งผมแสดงให้เห็นเป็นครั้งแรก

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

หากคุณแสดงเวลาด้วย Python สำหรับผู้ใช้ctimeทำงานได้ดีไม่ใช่ในตาราง (โดยทั่วไปแล้วมันจะไม่ค่อยเรียงลำดับที่ดี) แต่อาจอยู่ในนาฬิกา อย่างไรก็ตามฉันแนะนำเป็นการส่วนตัวเมื่อต้องจัดการกับเวลาใน Python ไม่ว่าจะเป็นการใช้เวลา Unix หรือdatetimeวัตถุUTC เขตเวลาที่ทราบ


133

ทำ

from time import time

t = time()
  • t - จำนวนลอยเหมาะสำหรับการวัดช่วงเวลา

มีความแตกต่างบางประการสำหรับแพลตฟอร์ม Unix และ Windows


ผลลัพธ์ของฉันใน Windows 10 home คือ 1576095264.2682993 - สำหรับ Windows นี่อาจให้เวลาเป็นวินาที
PythonMaster202

101
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

ที่ส่งออก GMT ปัจจุบันในรูปแบบที่ระบุ นอกจากนี้ยังมีlocaltime()วิธีการ

หน้านี้มีรายละเอียดเพิ่มเติม


69

คำตอบก่อนหน้านี้เป็นคำแนะนำที่ดี แต่ฉันคิดว่ามันใช้ง่ายที่สุดctime():

In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'

สิ่งนี้ให้การแทนค่าสตริงที่จัดรูปแบบเป็นอย่างดีของเวลาท้องถิ่นปัจจุบัน


OP ถามวิธีรับเวลาไม่ใช่วิธีแสดง!
TheTechRobo36414519



36

.isoformat() อยู่ในเอกสาร แต่ยังไม่ได้อยู่ที่นี่ (นี่เป็นคำตอบที่ยิ่งใหญ่คล้ายกับ @Ray Vega):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'

35

ทำไมไม่ถามUS Naval Observatoryผู้จับเวลาอย่างเป็นทางการของกองทัพเรือสหรัฐฯ

import requests
from lxml import html

page = requests.get('http://tycho.usno.navy.mil/cgi-bin/timer.pl')
tree = html.fromstring(page.content)
print(tree.xpath('//html//body//h3//pre/text()')[1])

หากคุณอาศัยอยู่ในพื้นที่ DC (เช่นฉัน) เวลาในการตอบสนองอาจไม่เลวร้ายเกินไป ...


18
@ C8H10N4O2 ในขณะที่คุณถูกต้องว่าคำตอบอื่น ๆ คิดว่าคอมพิวเตอร์ของคุณรู้เวลาที่ถูกต้องแล้วคำตอบนี้จะถือว่าคอมพิวเตอร์มีการเชื่อมต่อกับอินเทอร์เน็ตคุณอยู่ในสหรัฐอเมริกาและพวกเขาจะไม่ลบไฟล์นั้น / แก้ไขลิงค์ ข้อสันนิษฐานในคำตอบนี้มากกว่าที่ยอมรับ ยังไม่มีใครฉลาดน้อยกว่า
sudobangbang

33

การใช้หมีแพนด้าเพื่อให้ได้เวลาปัจจุบันให้จัดการปัญหามากเกินไป:

import pandas as pd
print(pd.datetime.now())
print(pd.datetime.now().date())
print(pd.datetime.now().year)
print(pd.datetime.now().month)
print(pd.datetime.now().day)
print(pd.datetime.now().hour)
print(pd.datetime.now().minute)
print(pd.datetime.now().second)
print(pd.datetime.now().microsecond)

เอาท์พุท:

2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693

28

นี่คือสิ่งที่ฉันลงเอยด้วย:

>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11

นอกจากนี้ตารางนี้ยังเป็นข้อมูลอ้างอิงที่จำเป็นสำหรับการเลือกรหัสรูปแบบที่เหมาะสมเพื่อให้ได้รับการจัดรูปแบบวันที่ตามที่คุณต้องการ (จากเอกสาร Python "datetime" ที่นี่ )

ตารางโค้ดรูปแบบ strftime


2
strftime(time_format)time_formatส่งกลับเวลาท้องถิ่นปัจจุบันเป็นสตริงที่สอดคล้องกับที่กำหนด หมายเหตุ: การtime.strftime()และdatetime.strftime()สนับสนุนชุดคำสั่งที่แตกต่างกันเช่นการ%zไม่ได้รับการสนับสนุนโดยtime.strftime()ในหลาม 2
jfs

1
เป็นการใช้งานที่ดีกว่าในการใช้วันที่และเวลาแทนการใช้เวลาหรือไม่
Kristen G.

2
timeฟังก์ชั่นโมดูลหลายตัวเป็นตัวห่อรอบฟังก์ชัน C datetimeเป็นระดับที่สูงขึ้นและมักพกพาได้มากกว่า
jfs

24

หากคุณใช้งาน numpy อยู่แล้วคุณสามารถใช้ numpy.datetime64 () ฟังก์ชันได้โดยตรง

import numpy as np
str(np.datetime64('now'))

สำหรับวันที่เท่านั้น:

str(np.datetime64('today'))

หรือถ้าคุณใช้แพนด้าอยู่แล้วคุณสามารถใช้ฟังก์ชัน pandas.to_datetime ()

import pandas as pd
str(pd.to_datetime('now'))

หรือ,

str(pd.to_datetime('today'))

23

คุณสามารถใช้timeโมดูล:

import time
print time.strftime("%d/%m/%Y")

>>> 06/02/2015

การใช้เงินทุนYให้เต็มปีและการใช้yจะให้06/02/15จะให้

คุณสามารถใช้รหัสต่อไปนี้เพื่อให้เวลานานขึ้น:

time.strftime("%a, %d %b %Y %H:%M:%S")
>>> 'Fri, 06 Feb 2015 17:45:09'

20

datetime.now()ส่งคืนเวลาปัจจุบันเป็นออบเจ็กต์ไร้เดียงสาที่แสดงเวลาในเขตเวลาท้องถิ่น ค่านั้นอาจไม่ชัดเจนเช่นในระหว่างการเปลี่ยน DST ("ถอยกลับ") เพื่อหลีกเลี่ยงความคลุมเครือควรใช้เขตเวลา UTC:

from datetime import datetime

utc_time = datetime.utcnow()
print(utc_time) # -> 2014-12-22 22:48:59.916417

หรือวัตถุที่รับรู้เขตเวลาที่มีข้อมูลเขตเวลาที่สอดคล้องกัน (Python 3.2+):

from datetime import datetime, timezone

now = datetime.now(timezone.utc).astimezone()
print(now) # -> 2014-12-23 01:49:25.837541+03:00

18
import datetime
date_time = datetime.datetime.now()

date = date_time.date()  # Gives the date
time = date_time.time()  # Gives the time

print date.year, date.month, date.day
print time.hour, time.minute, time.second, time.microsecond

ทำdir(date)หรือตัวแปรใด ๆ รวมถึงแพ็คเกจ คุณสามารถรับคุณลักษณะและวิธีการทั้งหมดที่เกี่ยวข้องกับตัวแปร


@snofty และ @ user1016274 ถ้าimport datetimeเป็นเช่นนั้นdatetime.datetime.now()\ n ถ้าfrom datetime import datetimeเป็นเช่นนั้นdatetime.now()
theBuzzyCoder

17
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'

ฉันคิดว่าคุณตั้งใจจะพูดว่า "datetime.now (). strftime (... )"
hlin117

ใช่มันสามารถทำได้ตามที่คุณพูด "datetime.datetime.now (). strftime ("% H:% M:% S:% MS ")"
user2030113

3
% MS ไม่ได้ให้มิลลิวินาที !!
ZF007

15

โดยค่าเริ่มต้นnow()ฟังก์ชั่นส่งกลับออกในYYYY-MM-DD HH:MM:SS:MSรูปแบบ ใช้สคริปต์ตัวอย่างด้านล่างเพื่อรับวันที่และเวลาปัจจุบันในสคริปต์ Python และพิมพ์ผลลัพธ์บนหน้าจอ สร้างไฟล์ที่getDateTime1.pyมีเนื้อหาด้านล่าง

import datetime

currentDT = datetime.datetime.now()
print (str(currentDT))

ผลลัพธ์มีลักษณะดังนี้:

2018-03-01 17:03:46.759624

14

คำถามนี้ไม่ต้องการคำตอบใหม่เพียงเพื่อประโยชน์ของมัน ... ของเล่น / โมดูล ish ใหม่ที่สวยงามอย่างไรก็ตามมีเหตุผลเพียงพอ นั่นคือห้องสมุดลูกตุ้มซึ่งดูเหมือนจะทำสิ่งต่าง ๆ ที่ลูกศรพยายามยกเว้นโดยไม่มีข้อบกพร่องและข้อบกพร่องที่แฝงอยู่ซึ่งลูกศร

ตัวอย่างเช่นคำตอบของคำถามเดิม:

>>> import pendulum
>>> print(pendulum.now())
2018-08-14T05:29:28.315802+10:00
>>> print(pendulum.now('utc'))
2018-08-13T19:29:35.051023+00:00

มีมาตรฐานจำนวนมากที่ต้องการการระบุที่อยู่รวมถึง RFC หลายอันและ ISO ที่ต้องกังวล เคยผสมกัน ไม่ต้องกังวลลองดูเล็กน้อยว่าdir(pendulum.constants)มีรูปแบบมากกว่า RFC และ ISO เล็กน้อย

เมื่อเราพูดท้องถิ่นแม้ว่าเราหมายถึงอะไร ฉันหมายถึง:

>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>

ส่วนใหญ่ของคุณที่เหลือคงหมายถึงที่อื่น

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


13

เวลาปัจจุบันของเขตเวลา

from datetime import datetime
import pytz

tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY time:", datetime_NY.strftime("%H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London time:", datetime_London.strftime("%H:%M:%S"))

tz_India = pytz.timezone('Asia/India')
datetime_India = datetime.now(tz_India)
print("India time:", datetime_India.strftime("%H:%M:%S"))

#list timezones
pytz.all_timezones

12

ลองใช้โมดูลลูกศรจากhttp://crsmithdev.com/arrow/ :

import arrow
arrow.now()

หรือเวอร์ชัน UTC:

arrow.utcnow()

หากต้องการเปลี่ยนเอาต์พุตให้เพิ่ม. format ():

arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')

สำหรับเขตเวลาเฉพาะ:

arrow.now('US/Pacific')

ชั่วโมงที่ผ่านมา:

arrow.utcnow().replace(hours=-1)

หรือถ้าคุณต้องการส่วนสำคัญ

arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'

5
ระวังว่าarrow.now('Time/Zone')อาจล้มเหลวในบางเขตเวลา (การarrowใช้งานdateutilที่ทำให้ utc -> การแปลงในเครื่องที่ใช้ภายในarrow.now()เสียหายหมายเหตุ: pytzไม่มีปัญหาดังกล่าวนอกจากนี้ยังมีปัญหาอื่น ๆ ที่เกี่ยวข้องกับเขตเวลา
jfs

12

ฉันต้องการใช้เวลาเป็นมิลลิวินาที วิธีง่ายๆในการรับ:

import time, datetime

print(datetime.datetime.now().time())                         # 11:20:08.272239

# Or in a more complicated way
print(datetime.datetime.now().time().isoformat())             # 11:20:08.272239
print(datetime.datetime.now().time().strftime('%H:%M:%S.%f')) # 11:20:08.272239

# But do not use this:
print(time.strftime("%H:%M:%S.%f", time.localtime()), str)    # 11:20:08.%f

แต่ฉันต้องการแค่มิลลิวินาทีเท่านั้นใช่ไหม วิธีที่สั้นที่สุดที่จะได้มา:

import time

time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751

เพิ่มหรือลบเลขศูนย์จากการคูณครั้งล่าสุดเพื่อปรับจำนวนจุดทศนิยมหรือเพียงแค่:

def get_time_str(decimal_points=3):
    return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)

1
สิ่งนี้ใช้ได้ใน Python 3: time.strftime ("% H:% M:% S", time.localtime ()) + '. {}'. รูปแบบ (int (time.time ()% 1 * 1000))
Greg Graham

11

คุณสามารถใช้ฟังก์ชั่นนี้เพื่อให้ได้เวลา (น่าเสียดายที่ไม่ได้บอกว่าเป็น AM หรือ PM):

def gettime():
    from datetime import datetime
    return ((str(datetime.now())).split(' ')[1]).split('.')[0]

ในการรับชั่วโมงนาทีวินาทีและมิลลิวินาทีเพื่อรวมในภายหลังคุณสามารถใช้ฟังก์ชันเหล่านี้:

ชั่วโมง:

def gethour():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]

นาที:

def getminute():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]

ประการที่สอง:

def getsecond():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]

มิลลิวินาที:

def getmillisecond():
    from datetime import datetime
    return (str(datetime.now())).split('.')[1]

10

หากคุณต้องการให้เวลาประทับปัจจุบันเป็น ms (ตัวอย่างเช่นเพื่อวัดเวลาดำเนินการ) คุณสามารถใช้โมดูล "timeit":

import timeit
start_time = timeit.default_timer()
do_stuff_you_want_to_measure()
end_time = timeit.default_timer()
print("Elapsed time: {}".format(end_time - start_time))

8

ต่อไปนี้เป็นสิ่งที่ฉันใช้เพื่อรับเวลาโดยไม่ต้องจัดรูปแบบ บางคนไม่ชอบวิธีการแยก แต่มีประโยชน์ที่นี่:

from time import ctime
print ctime().split()[3]

มันจะพิมพ์ในรูปแบบ HH: MM: SS


8

เพราะยังไม่มีใครพูดถึงและนี่คือสิ่งที่ฉันพบเมื่อเร็ว ๆ นี้ ... วิธี fromutc () ของ pytz timezone รวมกับ utcnow ของ datetime () เป็นวิธีที่ดีที่สุดที่ฉันพบว่าได้รับเวลาปัจจุบันที่มีประโยชน์ (และวันที่) ในเขตเวลาใดก็ได้

from datetime import datetime

import pytz


JST = pytz.timezone("Asia/Tokyo")


local_time = JST.fromutc(datetime.utcnow())

local_time.time()หากสิ่งที่คุณต้องการคือเวลาที่คุณจะได้รับแล้วว่ามีการ


น่าแปลกที่คำตอบข้างต้นทั้งหมดไม่ได้กล่าวถึงเขตเวลา คุณควรจะรวมถึง strftime เพื่อให้ได้รูปแบบที่คุณต้องการ
GraphicalDot

1
ฉันไม่ได้รวมไว้เนื่องจากมีคำตอบอื่น ๆ อยู่แล้ว (และการจัดรูปแบบการแสดงไม่ใช่ส่วนหนึ่งของคำถาม)
kungphu

7

คำถามนี้มีไว้สำหรับ Python แต่เนื่องจาก Django เป็นหนึ่งในเฟรมเวิร์กที่ใช้กันอย่างแพร่หลายสำหรับ Python สิ่งสำคัญที่ควรทราบคือหากคุณใช้ Django คุณสามารถใช้timezone.now()แทนdatetime.datetime.now()ได้เสมอ อดีตคือเขตเวลา 'ระวัง' ในขณะที่หลังไม่ได้

ดูคำตอบดังนั้นนี้และเอกสาร Djangotimezone.now()สำหรับรายละเอียดและเหตุผลที่อยู่เบื้องหลัง

from django.utils import timezone

now = timezone.now()

7

คุณสามารถทำได้โดยใช้ ctime ():

from time import time, ctime
t = time()
ctime(t)

เอาท์พุท:

Sat Sep 14 21:27:08 2019

ผลลัพธ์เหล่านี้จะแตกต่างกันเนื่องจากการประทับเวลาที่ส่งคืนโดยctime()ขึ้นอยู่กับที่ตั้งทางภูมิศาสตร์ของคุณ

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