Các mô-đun / phương pháp được sử dụng để có được thời gian hiện tại là gì?
Các mô-đun / phương pháp được sử dụng để có được thời gian hiện tại là gì?
Câu trả lời:
Sử dụng:
>>> 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
Và chỉ thời gian:
>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)
>>> print(datetime.datetime.now().time())
15:08:24.789150
Xem tài liệu để biết thêm thông tin.
Để lưu kiểu gõ, bạn có thể nhập datetime
đối tượng từ datetime
mô-đun:
>>> from datetime import datetime
Sau đó loại bỏ hàng đầu datetime.
từ tất cả các bên trên.
datetime.datetime.now()
vào bảng điều khiển tương tác Python 2.7 của tôi (IronPython chưa được cập nhật) sẽ cho tôi hành vi tương tự như ví dụ mới hơn sử dụng print()
trong câu trả lời. Tôi đã không sao chép thành công những gì câu trả lời ban đầu hiển thị (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (Không phải tôi thực sự muốn, hành vi print () được ưa thích, nhưng tôi tò mò.)
datetime.now()
nó sẽ in ra giống như câu trả lời của bạn cho thấy print(datetime.now())
...
Bạn có thể sử dụng time.strftime()
:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
time
mô-đun so với datetime
mô-đun?
localtime()
thay vì gmtime()
để lấy giờ địa phương của bạn.
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Trong ví dụ này, đầu ra sẽ như thế này: '2013-09-18 11:16:32'
Dưới đây là danh sách các strftime
chỉ thị .
Tương tự như câu trả lời của Harley , nhưng sử dụng str()
chức năng cho định dạng dễ đọc, dễ đọc hơn một chút của con người:
>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
Làm cách nào để có được thời gian hiện tại trong Python?
time
mô-đunCác time
mô-đun cung cấp chức năng cho chúng ta biết thời gian trong "giây kể từ khi kỷ nguyên" cũng như các tiện ích khác.
import time
Đây là định dạng bạn nên lấy dấu thời gian để lưu trong cơ sở dữ liệu. Đó là một số dấu phẩy động đơn giản có thể được chuyển đổi thành một số nguyên. Nó cũng tốt cho số học tính bằng giây, vì nó đại diện cho số giây kể từ ngày 1 tháng 1 năm 1970 00:00:00 và đó là ánh sáng bộ nhớ liên quan đến các đại diện khác của thời gian chúng ta sẽ xem xét tiếp theo:
>>> time.time()
1424233311.771502
Dấu thời gian này không tính đến giây nhuận, vì vậy nó không tuyến tính - giây nhuận bị bỏ qua. Vì vậy, mặc dù nó không tương đương với tiêu chuẩn UTC quốc tế, nhưng nó gần, và do đó khá tốt cho hầu hết các trường hợp lưu trữ hồ sơ.
Điều này không lý tưởng cho việc lập kế hoạch của con người, tuy nhiên. Nếu bạn có một sự kiện trong tương lai mà bạn muốn diễn ra tại một thời điểm nhất định, bạn sẽ muốn lưu trữ thời gian đó bằng một chuỗi có thể được phân tích cú pháp thành đối tượng datetime hoặc đối tượng datetime được tuần tự hóa (những điều này sẽ được mô tả sau).
time.ctime
Bạn cũng có thể biểu thị thời gian hiện tại theo cách mà hệ điều hành của bạn ưa thích (có nghĩa là nó có thể thay đổi khi bạn thay đổi tùy chọn hệ thống của mình, vì vậy đừng dựa vào điều này để trở thành tiêu chuẩn trên tất cả các hệ thống, như tôi đã thấy người khác mong đợi) . Điều này thường thân thiện với người dùng, nhưng thường không dẫn đến chuỗi người ta có thể sắp xếp theo thứ tự thời gian:
>>> time.ctime()
'Tue Feb 17 23:21:56 2015'
Bạn cũng có thể hydrat dấu thời gian thành dạng có thể đọc được của con người ctime
:
>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'
Chuyển đổi này cũng không tốt cho việc lưu giữ hồ sơ (ngoại trừ trong văn bản sẽ chỉ được phân tích cú pháp bởi con người - và với Nhận dạng ký tự quang học và Trí tuệ nhân tạo được cải thiện, tôi nghĩ rằng số lượng các trường hợp này sẽ giảm đi).
datetime
mô-đunCác datetime
mô-đun cũng khá hữu ích ở đây:
>>> import datetime
datetime.datetime.now
Đây datetime.now
là một phương thức lớp trả về thời gian hiện tại. Nó sử dụng time.localtime
mà không có thông tin múi giờ (nếu không được cung cấp, nếu không, hãy xem nhận biết múi giờ bên dưới). Nó có một đại diện (cho phép bạn tạo lại một đối tượng tương đương) lặp lại trên vỏ, nhưng khi được in (hoặc bị ép buộc thành a str
), nó ở định dạng có thể đọc được (và gần như ISO) của con người, và sắp xếp từ vựng tương đương với sắp xếp theo thứ tự thời gian:
>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461
utcnow
Bạn có thể nhận được một đối tượng datetime trong thời gian UTC, một tiêu chuẩn toàn cầu, bằng cách thực hiện điều này:
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988
UTC là một tiêu chuẩn thời gian gần tương đương với múi giờ GMT. (Mặc dù GMT và UTC không thay đổi theo Giờ tiết kiệm ánh sáng ban ngày, người dùng của họ có thể chuyển sang các múi giờ khác, như Giờ mùa hè của Anh, trong Mùa hè.)
Tuy nhiên, không có đối tượng datetime nào chúng tôi tạo ra cho đến nay có thể dễ dàng chuyển đổi thành các múi giờ khác nhau. Chúng ta có thể giải quyết vấn đề đó với pytz
mô-đun:
>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)
Tương tự, trong Python 3, chúng ta có timezone
lớp có một timezone
đối tượng utc được đính kèm, điều này cũng làm cho múi giờ đối tượng nhận biết (nhưng để chuyển đổi sang múi giờ khác mà không có pytz
mô-đun tiện dụng được để lại như một bài tập cho người đọc):
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)
Và chúng ta thấy chúng ta có thể dễ dàng chuyển đổi thành các múi giờ từ đối tượng utc ban đầu.
>>> 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
Bạn cũng có thể làm cho một đối tượng datetime ngây thơ nhận biết bằng phương thức pytz
múi giờ localize
hoặc bằng cách thay thế thuộc tính tzinfo (với replace
, điều này được thực hiện một cách mù quáng), nhưng đây là những biện pháp cuối cùng hơn là cách thực hành tốt nhất:
>>> 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>)
Các pytz
mô-đun cho phép chúng ta làm cho chúng tôi datetime
đối tượng TimeZone nhận thức và chuyển đổi lần đến hàng trăm múi giờ có sẵn trong các pytz
mô-đun.
Người ta có thể tuần tự hóa đối tượng này theo thời gian UTC và lưu trữ nó trong cơ sở dữ liệu, nhưng nó sẽ đòi hỏi nhiều bộ nhớ hơn và dễ bị lỗi hơn là lưu trữ thời gian Unix Epoch, mà tôi đã trình bày trước tiên.
Các cách khác của thời gian xem dễ bị lỗi hơn nhiều, đặc biệt là khi xử lý dữ liệu có thể đến từ các múi giờ khác nhau. Bạn muốn không có sự nhầm lẫn về việc múi giờ hoặc đối tượng datetime được xê-ri hóa được dự định sử dụng.
Nếu bạn đang hiển thị thời gian với Python cho người dùng, hãy ctime
hoạt động độc đáo, không phải trong một bảng (nó thường không được sắp xếp tốt), nhưng có lẽ trong một chiếc đồng hồ. Tuy nhiên, cá nhân tôi khuyên bạn, khi xử lý thời gian trong Python, sử dụng thời gian Unix hoặc datetime
đối tượng UTC nhận biết múi giờ .
Làm
from time import time
t = time()
t
- số float, tốt cho phép đo khoảng thời gian.Có một số khác biệt cho nền tảng Unix và Windows.
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'
Điều đó xuất ra GMT hiện tại ở định dạng được chỉ định. Ngoài ra còn có một localtime()
phương pháp.
Đây trang có thêm chi tiết.
Các câu trả lời trước đây đều là những gợi ý hay, nhưng tôi thấy nó dễ sử dụng nhất ctime()
:
In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'
Điều này cung cấp một đại diện chuỗi được định dạng độc đáo của giờ địa phương hiện tại.
Cách nhanh nhất là:
>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
.isoformat()
có trong tài liệu, nhưng chưa có ở đây (điều này rất giống với câu trả lời của @Ray Vega):
>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'
Tại sao không hỏi Đài quan sát hải quân Hoa Kỳ , máy chấm công chính thức của Hải quân Hoa Kỳ?
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])
Nếu bạn sống ở khu vực DC (như tôi), độ trễ có thể không quá tệ ...
Sử dụng gấu trúc để có được thời gian hiện tại, loại vấn đề quá mức cần thiết:
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)
Đầu ra:
2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693
Đây là những gì tôi đã kết thúc với:
>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11
Ngoài ra, bảng này là một tài liệu tham khảo cần thiết để chọn mã định dạng phù hợp để lấy ngày được định dạng theo cách bạn muốn (từ tài liệu "datetime" của Python ở đây ).
strftime(time_format)
trả về thời gian cục bộ hiện tại dưới dạng một chuỗi tương ứng với chuỗi đã cho time_format
. Lưu ý: time.strftime()
và datetime.strftime()
hỗ trợ các bộ chỉ thị khác nhau, ví dụ, %z
không được hỗ trợ bởi time.strftime()
Python 2 .
time
chức năng mô-đun là các hàm bao mỏng xung quanh các hàm C tương ứng. datetime
là một cấp độ cao hơn và nó thường là di động hơn.
nếu bạn đang sử dụng numpy rồi thì bạn có thể sử dụng hàm numpy.datetime64 ().
import numpy as np
str(np.datetime64('now'))
chỉ ngày
str(np.datetime64('today'))
hoặc, nếu bạn đã sử dụng gấu trúc rồi thì bạn có thể sử dụng hàm pandas.to_datetime ()
import pandas as pd
str(pd.to_datetime('now'))
hoặc là,
str(pd.to_datetime('today'))
datetime.now()
trả về thời gian hiện tại dưới dạng đối tượng datetime ngây thơ đại diện cho thời gian trong múi giờ địa phương. Giá trị đó có thể không rõ ràng, ví dụ, trong quá trình chuyển đổi DST ("quay lại"). Để tránh sự mơ hồ, nên sử dụng múi giờ UTC:
from datetime import datetime
utc_time = datetime.utcnow()
print(utc_time) # -> 2014-12-22 22:48:59.916417
Hoặc một đối tượng nhận biết múi giờ có thông tin múi giờ tương ứng được đính kèm (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
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
Làm dir(date)
hoặc bất kỳ biến bao gồm cả gói. Bạn có thể nhận được tất cả các thuộc tính và phương thức liên quan đến biến.
import datetime
đó là datetime.datetime.now()
\ n nếu from datetime import datetime
đó làdatetime.now()
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'
Theo mặc định, now()
hàm trả về đầu ra ở YYYY-MM-DD HH:MM:SS:MS
định dạng. Sử dụng tập lệnh mẫu bên dưới để lấy ngày và giờ hiện tại trong tập lệnh Python và in kết quả trên màn hình. Tạo tập tin getDateTime1.py
với nội dung dưới đây.
import datetime
currentDT = datetime.datetime.now()
print (str(currentDT))
Đầu ra trông như dưới đây:
2018-03-01 17:03:46.759624
Câu hỏi này không cần câu trả lời mới chỉ vì nó ... một đồ chơi / mô-đun mới sáng bóng, tuy nhiên, là đủ biện minh. Đó là thư viện Pendulum , dường như thực hiện những thứ mà mũi tên đã cố gắng, ngoại trừ không có lỗi và lỗi cố hữu mà mũi tên bao vây.
Chẳng hạn, câu trả lời cho câu hỏi ban đầu:
>>> 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
Có rất nhiều tiêu chuẩn cần giải quyết, bao gồm nhiều RFC và ISO, phải lo lắng. Bao giờ làm cho chúng lẫn lộn; đừng lo lắng dir(pendulum.constants)
, mặc dù vậy, hãy nhìn vào Có nhiều hơn một chút so với các định dạng RFC và ISO ở đó.
Khi chúng ta nói địa phương, mặc dù chúng ta có ý nghĩa gì? Ý tôi là
>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>
Có lẽ hầu hết phần còn lại của bạn có nghĩa là một nơi khác.
Và trên đó đi. Câu chuyện dài ngắn: Pendulum cố gắng thực hiện cho ngày và thời gian những yêu cầu đã làm cho HTTP. Nó đáng để xem xét, đặc biệt là về cả tính dễ sử dụng và tài liệu mở rộng.
Thời gian hiện tại của múi giờ
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
Hãy thử mô-đun mũi tên từ http://crsmithdev.com/arrow/ :
import arrow
arrow.now()
Hoặc phiên bản UTC:
arrow.utcnow()
Để thay đổi đầu ra của nó, hãy thêm .format ():
arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')
Đối với múi giờ cụ thể:
arrow.now('US/Pacific')
Một giờ trước:
arrow.utcnow().replace(hours=-1)
Hoặc nếu bạn muốn ý chính.
arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'
arrow.now('Time/Zone')
với một số múi giờ ( arrow
sử dụng dateutil
đã bị hỏng utc -> chuyển đổi cục bộ được sử dụng bên trong arrow.now()
. Lưu ý: pytz
không có vấn đề như vậy . Ngoài ra, có các vấn đề khác liên quan đến múi giờ
Tôi muốn có được thời gian với mili giây. Một cách đơn giản để có được chúng:
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
Nhưng tôi chỉ muốn một phần nghìn giây , phải không? Cách ngắn nhất để có được chúng:
import time
time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751
Thêm hoặc xóa các số 0 từ phép nhân cuối cùng để điều chỉnh số điểm thập phân hoặc chỉ:
def get_time_str(decimal_points=3):
return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)
Bạn có thể sử dụng chức năng này để lấy thời gian (thật không may là nó không nói AM hoặc PM):
def gettime():
from datetime import datetime
return ((str(datetime.now())).split(' ')[1]).split('.')[0]
Để có được giờ, phút, giây và mili giây để hợp nhất sau này, bạn có thể sử dụng các chức năng sau:
Giờ:
def gethour():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]
Phút:
def getminute():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]
Thứ hai:
def getsecond():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]
Một phần nghìn giây:
def getmillisecond():
from datetime import datetime
return (str(datetime.now())).split('.')[1]
Nếu bạn chỉ muốn dấu thời gian hiện tại tính bằng ms (ví dụ: để đo thời gian thực hiện), bạn cũng có thể sử dụng mô-đun "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))
Sau đây là những gì tôi sử dụng để có được thời gian mà không cần phải định dạng. Một số người không thích phương pháp phân tách, nhưng nó rất hữu ích ở đây:
from time import ctime
print ctime().split()[3]
Nó sẽ in ở định dạng HH: MM: SS.
Bởi vì chưa có ai đề cập đến nó và đây là điều mà tôi đã gặp gần đây ... phương pháp fromutc () của pzonez kết hợp với utcnow () của datetime là cách tốt nhất mà tôi tìm thấy để có được thời gian hiện tại (và ngày) hữu ích trong bất kỳ múi giờ nào.
from datetime import datetime
import pytz
JST = pytz.timezone("Asia/Tokyo")
local_time = JST.fromutc(datetime.utcnow())
Nếu tất cả những gì bạn muốn là thời gian, thì bạn có thể có được điều đó với local_time.time()
.
Câu hỏi này dành cho Python nhưng vì Django là một trong những khung được sử dụng rộng rãi nhất cho Python, nên điều quan trọng cần lưu ý là nếu bạn đang sử dụng Django, bạn luôn có thể sử dụng timezone.now()
thay vì datetime.datetime.now()
. Cái trước là múi giờ 'nhận thức' trong khi cái trước thì không.
Xem câu trả lời SO này và tài liệu Django để biết chi tiết và lý do đằng sau timezone.now()
.
from django.utils import timezone
now = timezone.now()
Bạn có thể làm như vậy bằng ctime ():
from time import time, ctime
t = time()
ctime(t)
đầu ra:
Sat Sep 14 21:27:08 2019
Các đầu ra này khác nhau vì dấu thời gian được trả về ctime()
phụ thuộc vào vị trí địa lý của bạn.