Apa modul / metode yang digunakan untuk mendapatkan waktu saat ini?
Apa modul / metode yang digunakan untuk mendapatkan waktu saat ini?
Jawaban:
Menggunakan:
>>> 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
Dan tepat waktu:
>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)
>>> print(datetime.datetime.now().time())
15:08:24.789150
Lihat dokumentasi untuk informasi lebih lanjut.
Untuk menyimpan pengetikan, Anda dapat mengimpor datetime
objek dari datetime
modul:
>>> from datetime import datetime
Kemudian hapus yang memimpin datetime.
dari semua yang di atas.
datetime.datetime.now()
konsol interaktif Python 2.7 saya (IronPython belum diperbarui) memberi saya perilaku yang sama dengan contoh yang lebih baru menggunakan print()
dalam jawabannya. Saya belum berhasil mereplikasi apa yang ditunjukkan oleh jawaban aslinya (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (Bukannya saya benar-benar ingin, perilaku print () lebih disukai, tetapi saya ingin tahu.)
datetime.now()
sendiri itu mencetaknya sama seperti jawaban Anda menunjukkan print(datetime.now())
...
Anda bisa menggunakan time.strftime()
:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
time
modul vs. datetime
modul?
localtime()
alih-alih gmtime()
untuk mendapatkan waktu lokal Anda.
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Untuk contoh ini, hasilnya akan seperti ini: '2013-09-18 11:16:32'
Ini adalah daftar strftime
arahan .
Mirip dengan jawaban Harley , tetapi gunakan str()
fungsi ini untuk format cepat-n-kotor, sedikit lebih dapat dibaca manusia:
>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
Bagaimana saya mendapatkan waktu saat ini di Python?
time
modulThe time
modul menyediakan fungsi yang memberitahu kita waktu di "detik sejak zaman" serta utilitas lainnya.
import time
Ini adalah format yang Anda harus dapatkan cap waktu untuk menyimpan dalam database. Ini adalah angka floating point sederhana yang dapat dikonversi ke integer. Ini juga baik untuk perhitungan dalam hitungan detik, karena mewakili jumlah detik sejak 1 Januari 1970 00:00:00, dan itu adalah lampu memori relatif terhadap representasi waktu lainnya yang akan kita lihat selanjutnya:
>>> time.time()
1424233311.771502
Stempel waktu ini tidak menghitung detik kabisat, jadi ini tidak linier - detik kabisat diabaikan. Jadi, meskipun tidak setara dengan standar UTC internasional, itu dekat, dan karena itu cukup baik untuk sebagian besar kasus pencatatan.
Namun, ini tidak ideal untuk penjadwalan manusia. Jika Anda memiliki acara di masa depan yang ingin Anda lakukan pada titik waktu tertentu, Anda ingin menyimpan waktu itu dengan string yang dapat diurai menjadi objek datetime atau objek datetime serial (ini akan dijelaskan nanti).
time.ctime
Anda juga dapat mewakili waktu saat ini dengan cara yang disukai oleh sistem operasi Anda (yang berarti dapat berubah ketika Anda mengubah preferensi sistem Anda, jadi jangan mengandalkan ini untuk menjadi standar di semua sistem, seperti yang saya lihat orang lain harapkan) . Ini biasanya ramah pengguna, tetapi biasanya tidak menghasilkan string yang dapat disortir secara kronologis:
>>> time.ctime()
'Tue Feb 17 23:21:56 2015'
Anda juga dapat melembabkan stempel waktu ke dalam bentuk yang dapat dibaca manusia ctime
:
>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'
Konversi ini juga tidak baik untuk penyimpanan catatan (kecuali dalam teks yang hanya akan diuraikan oleh manusia - dan dengan Pengenalan Karakter Optik dan Kecerdasan Buatan yang ditingkatkan, saya pikir jumlah kasus ini akan berkurang).
datetime
modulThe datetime
Modul ini juga cukup berguna di sini:
>>> import datetime
datetime.datetime.now
Ini datetime.now
adalah metode kelas yang mengembalikan waktu saat ini. Ini menggunakan time.localtime
tanpa info zona waktu (jika tidak diberikan, jika tidak lihat zona waktu sadar di bawah). Ini memiliki representasi (yang akan memungkinkan Anda untuk membuat ulang objek yang setara) bergema di shell, tetapi ketika dicetak (atau dipaksa ke a str
), itu dalam format yang dapat dibaca manusia (dan hampir ISO), dan jenis leksikografis setara dengan semacam kronologis:
>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461
utcnow
Anda bisa mendapatkan objek datetime dalam waktu UTC, standar global, dengan melakukan ini:
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988
UTC adalah standar waktu yang hampir setara dengan zona waktu GMT. (Meskipun GMT dan UTC tidak berubah untuk Daylight Savings Time, pengguna mereka dapat beralih ke zona waktu lainnya, seperti British Summer Time, selama Musim Panas.)
Namun, tidak ada objek datetime yang kami buat sejauh ini dapat dengan mudah dikonversi ke berbagai zona waktu. Kita dapat memecahkan masalah itu dengan pytz
modul:
>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)
Secara setara, dalam Python 3 kita memiliki timezone
kelas dengan timezone
instance utc yang terpasang, yang juga membuat objek timezone sadar (tetapi untuk mengkonversi ke zona waktu lain tanpa pytz
modul berguna dibiarkan sebagai latihan untuk pembaca):
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)
Dan kami melihat kami dapat dengan mudah mengkonversi zona waktu dari objek utc asli.
>>> 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
Anda juga dapat membuat objek datetime naif menyadari dengan metode pytz
zona waktu localize
, atau dengan mengganti atribut tzinfo (dengan replace
, ini dilakukan secara membabi buta), tetapi ini lebih merupakan upaya terakhir daripada praktik terbaik:
>>> 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>)
The pytz
modul memungkinkan kita untuk membuat kita datetime
benda Zona Waktu sadar dan mengubah kali ke ratusan zona waktu yang tersedia dalam pytz
modul.
Satu seolah-olah bisa cerita bersambung obyek ini untuk waktu UTC dan toko yang dalam database, tetapi akan memerlukan jauh lebih banyak memori dan lebih rentan terhadap kesalahan daripada hanya menyimpan waktu Unix Epoch, yang saya contohkan pertama.
Cara lain untuk melihat waktu jauh lebih rentan kesalahan, terutama ketika berhadapan dengan data yang mungkin berasal dari zona waktu yang berbeda. Anda ingin tidak ada kebingungan untuk zona waktu mana string atau objek datetime serial dimaksudkan untuk.
Jika Anda menampilkan waktu dengan Python untuk pengguna, ctime
berfungsi dengan baik, tidak dalam tabel (biasanya tidak diurutkan dengan baik), tetapi mungkin dalam jam. Namun, saya pribadi merekomendasikan, ketika berhadapan dengan waktu dalam Python, baik menggunakan waktu Unix, atau datetime
objek UTC sadar zona waktu .
Melakukan
from time import time
t = time()
t
- angka float, bagus untuk pengukuran interval waktu.Ada beberapa perbedaan untuk platform Unix dan Windows.
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'
Itu menampilkan GMT saat ini dalam format yang ditentukan. Ada juga localtime()
metode.
Halaman ini memiliki lebih banyak detail.
Jawaban sebelumnya adalah semua saran yang bagus, tetapi saya merasa paling mudah untuk digunakan ctime()
:
In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'
Ini memberikan representasi string yang diformat dengan baik dari waktu setempat saat ini.
Cara tercepat adalah:
>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
Mengapa tidak bertanya kepada US Naval Observatory , pencatat waktu resmi Angkatan Laut Amerika Serikat?
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])
Jika Anda tinggal di area DC (seperti saya) latensi mungkin tidak terlalu buruk ...
Menggunakan panda untuk mendapatkan waktu saat ini, agak berlebihan dalam mengatasi masalah:
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)
Keluaran:
2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693
Inilah yang akhirnya saya lakukan:
>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11
Juga, tabel ini adalah referensi yang diperlukan untuk memilih kode format yang sesuai untuk mendapatkan tanggal diformat seperti yang Anda inginkan (dari dokumentasi Python "datetime" di sini ).
strftime(time_format)
mengembalikan waktu lokal saat ini sebagai string yang sesuai dengan yang diberikan time_format
. Catatan: time.strftime()
dan datetime.strftime()
mendukung set direktif yang berbeda misalnya, %z
tidak didukung oleh time.strftime()
pada Python 2 .
time
fungsi modul adalah pembungkus tipis di sekitar fungsi C yang sesuai. datetime
adalah tingkat yang lebih tinggi dan biasanya lebih portabel.
jika Anda sudah menggunakan numpy maka secara langsung Anda dapat menggunakan fungsi numpy.datetime64 ().
import numpy as np
str(np.datetime64('now'))
hanya untuk tanggal:
str(np.datetime64('today'))
atau, jika Anda sudah menggunakan panda maka Anda dapat menggunakan fungsi pandas.to_datetime ()
import pandas as pd
str(pd.to_datetime('now'))
atau,
str(pd.to_datetime('today'))
Anda dapat menggunakan time
modul:
import time
print time.strftime("%d/%m/%Y")
>>> 06/02/2015
Penggunaan modal Y
memberi satu tahun penuh, dan menggunakan y
akan memberi 06/02/15
.
Anda juga dapat menggunakan kode berikut untuk memberikan waktu yang lebih panjang:
time.strftime("%a, %d %b %Y %H:%M:%S")
>>> 'Fri, 06 Feb 2015 17:45:09'
datetime.now()
mengembalikan waktu saat ini sebagai objek datetime naif yang mewakili waktu di zona waktu lokal. Nilai itu mungkin ambigu misalnya, selama transisi DST ("mundur"). Untuk menghindari ambiguitas, zona waktu UTC harus digunakan:
from datetime import datetime
utc_time = datetime.utcnow()
print(utc_time) # -> 2014-12-22 22:48:59.916417
Atau objek sadar zona waktu yang memiliki info zona waktu terkait (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
Apakah dir(date)
atau variabel apa pun termasuk paket. Anda bisa mendapatkan semua atribut dan metode yang terkait dengan variabel.
import datetime
itu adalah datetime.datetime.now()
\ n jika from datetime import datetime
maka itudatetime.now()
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'
Secara default, now()
fungsi mengembalikan output dalam YYYY-MM-DD HH:MM:SS:MS
format. Gunakan skrip sampel di bawah ini untuk mendapatkan tanggal dan waktu saat ini dalam skrip Python dan mencetak hasil di layar. Buat file getDateTime1.py
dengan konten di bawah ini.
import datetime
currentDT = datetime.datetime.now()
print (str(currentDT))
Outputnya terlihat seperti di bawah ini:
2018-03-01 17:03:46.759624
Pertanyaan ini tidak memerlukan jawaban baru hanya untuk itu ... mainan / modul mengkilap baru, bagaimanapun, cukup pembenaran. Itu menjadi perpustakaan Pendulum , yang tampaknya melakukan hal-hal yang dicoba panah, kecuali tanpa cacat dan bug yang melekat yang menimpa panah.
Misalnya, jawaban atas pertanyaan awal:
>>> 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
Ada banyak standar yang perlu diperhatikan, termasuk beberapa RFC dan ISO, yang perlu dikhawatirkan. Pernah membuat mereka bingung; jangan khawatir, lihatlah sedikit. dir(pendulum.constants)
Ada sedikit lebih banyak daripada format RFC dan ISO di sana.
Ketika kita mengatakan lokal, apa artinya? Maksud saya:
>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>
Mungkin sebagian besar dari Anda berarti di tempat lain.
Dan seterusnya. Singkat cerita: Pendulum berupaya melakukan untuk tanggal dan waktu apa permintaan dilakukan untuk HTTP. Ini patut dipertimbangkan, terutama untuk kemudahan penggunaan dan dokumentasi yang luas.
Waktu saat ini dari zona waktu
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
Coba modul panah dari http://crsmithdev.com/arrow/ :
import arrow
arrow.now()
Atau versi UTC:
arrow.utcnow()
Untuk mengubah outputnya, tambahkan .format ():
arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')
Untuk zona waktu tertentu:
arrow.now('US/Pacific')
Satu jam yang lalu:
arrow.utcnow().replace(hours=-1)
Atau jika Anda menginginkan intinya.
arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'
arrow.now('Time/Zone')
mungkin gagal untuk beberapa zona waktu ( arrow
penggunaan dateutil
yang telah merusak utc -> konversi lokal yang digunakan di dalam arrow.now()
. Catatan: pytz
tidak memiliki masalah seperti itu . Juga, ada masalah terkait zona waktu lainnya
Saya ingin mendapatkan waktu dengan milidetik. Cara mudah untuk mendapatkannya:
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
Tetapi saya hanya menginginkan milidetik , bukan? Cara terpendek untuk mendapatkannya:
import time
time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751
Tambah atau hapus nol dari perkalian terakhir untuk menyesuaikan jumlah titik desimal, atau cukup:
def get_time_str(decimal_points=3):
return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)
Anda dapat menggunakan fungsi ini untuk mendapatkan waktu (sayangnya tidak mengatakan AM atau PM):
def gettime():
from datetime import datetime
return ((str(datetime.now())).split(' ')[1]).split('.')[0]
Untuk mendapatkan jam, menit, detik, dan milidetik untuk digabungkan nanti, Anda bisa menggunakan fungsi-fungsi ini:
Jam:
def gethour():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]
Menit:
def getminute():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]
Kedua:
def getsecond():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]
Mili detik:
def getmillisecond():
from datetime import datetime
return (str(datetime.now())).split('.')[1]
Jika Anda hanya ingin cap waktu saat ini dalam ms (misalnya, untuk mengukur waktu eksekusi), Anda juga dapat menggunakan modul "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))
Berikut ini adalah apa yang saya gunakan untuk mendapatkan waktu tanpa harus memformat. Beberapa orang tidak suka metode split, tetapi ini berguna di sini:
from time import ctime
print ctime().split()[3]
Ini akan mencetak dalam format HH: MM: SS.
Karena belum ada yang menyebutkannya, dan ini adalah sesuatu yang saya temui baru-baru ini ... metode fromutc () pytz timezone yang dikombinasikan dengan utcnow datetime () adalah cara terbaik yang saya temukan untuk mendapatkan waktu saat ini yang berguna (dan tanggal) di zona waktu apa pun.
from datetime import datetime
import pytz
JST = pytz.timezone("Asia/Tokyo")
local_time = JST.fromutc(datetime.utcnow())
Jika yang Anda inginkan adalah waktu, Anda bisa mendapatkannya dengan itu local_time.time()
.
Pertanyaan ini untuk Python tetapi karena Django adalah salah satu kerangka kerja yang paling banyak digunakan untuk Python, penting untuk dicatat bahwa jika Anda menggunakan Django Anda selalu dapat menggunakan timezone.now()
bukan datetime.datetime.now()
. Yang pertama adalah zona waktu 'sadar' sedangkan yang terakhir tidak.
Lihat jawaban SO ini dan dokumen Django untuk detail dan alasan di belakang timezone.now()
.
from django.utils import timezone
now = timezone.now()
Anda dapat melakukannya menggunakan ctime ():
from time import time, ctime
t = time()
ctime(t)
keluaran:
Sat Sep 14 21:27:08 2019
Output ini berbeda karena stempel waktu yang dikembalikan ctime()
tergantung pada lokasi geografis Anda.