Geçerli saati almak için kullanılan modül / yöntem nedir?
Geçerli saati almak için kullanılan modül / yöntem nedir?
Yanıtlar:
kullanın:
>>> 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
Ve tam zamanı:
>>> datetime.datetime.now().time()
datetime.time(15, 8, 24, 78915)
>>> print(datetime.datetime.now().time())
15:08:24.789150
Belgelere bakın fazla bilgi .
Yazmayı kaydetmek için datetime
nesneyi datetime
modülden içe aktarabilirsiniz :
>>> from datetime import datetime
Ardından, öncüyü datetime.
yukarıdakilerin hepsinden çıkarın .
datetime.datetime.now()
Python 2.7 interaktif konsolumu yazarak (IronPython henüz güncellenmedi) bana print()
cevapta kullanılan yeni örnekle aynı davranışı veriyor . Orijinal yanıtın gösterdiklerini başarıyla çoğaltmadım (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (Gerçekten istediğimden değil, print () davranışı tercih edilir, ama merak ediyorum.)
datetime.now()
Kendi yazdığım zaman , cevabınızın gösterdiği gibi aynı çıktı print(datetime.now())
...
Şunları kullanabilirsiniz time.strftime()
:
>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
time
Modülü neden modüle karşı kullanmalıyız datetime
?
localtime()
yerine işlevini kullanın gmtime()
.
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Bu örnek için, çıktı şu şekilde olacaktır: '2013-09-18 11:16:32'
İşte strftime
direktiflerin listesi .
Harley'nin cevabına benzer , ancak str()
hızlı n-kirli, biraz daha insan tarafından okunabilir format için işlevi kullanın :
>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
Python geçerli saati nasıl alabilirim?
time
modültime
Modül bize hem de diğer kamu hizmetleri "Dönemden beri saniye" zaman söyler fonksiyonları sağlar.
import time
Bu, veritabanlarına kaydetmek için zaman damgaları almanız gereken biçimdir. Bir tamsayıya dönüştürülebilen basit bir kayan nokta sayısıdır. Ayrıca, 1 Ocak 1970 00:00:00 tarihinden bu yana geçen saniye sayısını temsil ettiği için saniye cinsinden aritmetik için de iyidir ve bir sonraki bölüme bakacağımız diğer zaman gösterimlerine göre bellek ışığıdır:
>>> time.time()
1424233311.771502
Bu zaman damgası artık saniyeleri hesaba katmaz, bu nedenle doğrusal değildir - artık saniye yoksayılır. Bu yüzden uluslararası UTC standardına eşdeğer olmasa da, yakındır ve bu nedenle çoğu kayıt tutma durumu için oldukça iyidir.
Ancak bu, insan planlaması için ideal değildir. Belirli bir zamanda gerçekleşmek istediğiniz gelecekteki bir etkinliğiniz varsa, o saati datetime nesnesine veya serileştirilmiş datetime nesnesine ayrıştırılabilen bir dize ile depolamak istersiniz (bunlar daha sonra açıklanacaktır).
time.ctime
Geçerli saati işletim sisteminiz tarafından tercih edilen şekilde de temsil edebilirsiniz (bu, sistem tercihlerinizi değiştirdiğinizde değişebileceği anlamına gelir, bu nedenle, diğerlerinin beklediği gibi, tüm sistemlerde standart olması için buna güvenmeyin) . Bu genellikle kullanıcı dostudur, ancak genellikle kronolojik olarak sıralanan dizelerle sonuçlanmaz:
>>> time.ctime()
'Tue Feb 17 23:21:56 2015'
Zaman damgalarını insan tarafından okunabilir forma da hidratlayabilirsiniz ctime
:
>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'
Bu dönüşüm de kayıt tutma için iyi değildir (yalnızca insanlar tarafından ayrıştırılacak metin hariç - ve Gelişmiş Optik Karakter Tanıma ve Yapay Zeka ile, bu vakaların sayısının azalacağını düşünüyorum).
datetime
modüldatetime
Modül burada da oldukça yararlıdır:
>>> import datetime
datetime.datetime.now
datetime.now
Şimdiki zaman veren bir sınıf yöntemidir. Saat time.localtime
dilimi bilgisi olmadan kullanır (verilmezse, aşağıdaki saat dilimine bakın). Kabuğunda yankılanan bir temsili (eşdeğer bir nesneyi yeniden oluşturmanıza izin verir) vardır, ancak yazdırıldığında (veya a'ya zorlandığında str
), insan tarafından okunabilir (ve neredeyse ISO) biçimindedir ve sözlükbilimsel sıralama, kronolojik sıralama:
>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461
utcnow
Global bir standart olan UTC saatinde bunu yaparak datetime nesnesi alabilirsiniz:
>>> 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 saat dilimine neredeyse eşdeğer bir zaman standardıdır. (GMT ve UTC Yaz Saati Uygulaması için değişmezken, kullanıcıları Yaz aylarında İngiliz Yaz Saati gibi diğer saat dilimlerine geçebilir.)
Ancak, şimdiye kadar oluşturduğumuz tarih-saat nesnelerin hiçbiri kolayca çeşitli zaman dilimlerine dönüştürülemez. Bu sorunu pytz
modülle çözebiliriz :
>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)
Eşdeğer olarak, Python 3'te , nesnenin saat dilimini fark eden timezone
bir utc timezone
örneği eklenmiş sınıfa sahibiz (ancak kullanışlı pytz
modül olmadan başka bir saat dilimine dönüştürmek okuyucuya bir alıştırma olarak bırakılır):
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)
Ve görüyoruz ki orijinal utc nesnesinden zaman dilimlerine kolayca dönüştürebiliriz.
>>> 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
Ayrıca naif bir datetime nesnesini pytz
saat dilimi localize
yöntemiyle veya tzinfo özniteliğini değiştirerek (ile replace
körü körüne yapılır) değiştirebilirsiniz, ancak bunlar en iyi uygulamalardan daha son çözümlerdir :
>>> 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
Modül bizim yapmamıza izin verir datetime
nesneleri farkında dilimini ve mevcut saat dilimlerinde yüzlerce kez dönüştürmek pytz
modülü.
Bir görünüşte UTC zaman ve mağaza için bu nesne seri olabilir o bir veritabanında , ancak ilk önce gösterdiğim Unix Epoch zamanını depolamaktan çok daha fazla bellek gerektirir ve hataya daha açık olur.
Diğer görüntüleme zamanları, özellikle farklı zaman dilimlerinden gelebilecek verilerle uğraşırken çok daha fazla hataya açıktır. Bir dizenin veya serileştirilmiş datetime nesnesinin hangi zaman diliminin amaçlandığı konusunda karışıklık olmasını istemezsiniz.
Kullanıcı için Python ile zamanı görüntülüyorsanız, ctime
bir tabloda değil (genellikle iyi sıralanmaz), belki de bir saatte güzel çalışır. Ancak, Python'da zamanla uğraşırken, Unix zamanını veya saat dilimi farkında bir UTC datetime
nesnesini kullanarak kişisel olarak tavsiye ederim .
Yapmak
from time import time
t = time()
t
- şamandıra numarası, zaman aralığı ölçümü için iyi.Unix ve Windows platformları için bazı farklar vardır.
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'
Geçerli GMT'yi belirtilen biçimde çıkarır. Bir localtime()
yöntem de var.
Bu sayfada daha fazla ayrıntı var.
Önceki cevapların hepsi iyi öneriler, ancak kullanımı en kolay buluyorum ctime()
:
In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'
Bu, geçerli yerel saatin güzel biçimlendirilmiş dize temsilini verir.
En hızlı yol:
>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
Neden Birleşik Devletler Donanması'nın resmi zaman tutucusu olan ABD Deniz Gözlemevine sormuyorsunuz ?
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 bölgesinde (benim gibi) yaşıyorsanız, gecikme çok kötü olmayabilir ...
Şu anki saati almak için pandaları kullanmak , eldeki sorunun aşırıya kaçması:
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)
Çıktı:
2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693
Ben ne kadar sona erdi budur:
>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11
Ayrıca, bu tablo tarihi istediğiniz gibi biçimlendirmek için uygun format kodlarını seçmek için gerekli bir referanstır ( buradaki Python "datetime" belgelerinden ).
strftime(time_format)
geçerli yerel saati verilen değere karşılık gelen bir dize olarak döndürür time_format
. Not: time.strftime()
ve datetime.strftime()
farklı yönerge kümelerini %z
destekleyintime.strftime()
, örn., Python 2'de desteklenmez .
time
modül işlevi, karşılık gelen C işlevleri etrafında ince sargılardır. datetime
daha yüksek bir seviyedir ve genellikle daha taşınabilirdir.
zaten numpy kullanıyorsanız doğrudan numpy.datetime64 () işlevini kullanabilirsiniz.
import numpy as np
str(np.datetime64('now'))
sadece tarih için:
str(np.datetime64('today'))
veya zaten panda kullanıyorsanız pandas.to_datetime () işlevini kullanabilirsiniz.
import pandas as pd
str(pd.to_datetime('now'))
veya,
str(pd.to_datetime('today'))
time
Modülü kullanabilirsiniz :
import time
print time.strftime("%d/%m/%Y")
>>> 06/02/2015
Sermayenin kullanımı Y
tüm yılı verir ve kullanmak y
verir 06/02/15
.
Daha uzun bir zaman vermek için aşağıdaki kodu da kullanabilirsiniz:
time.strftime("%a, %d %b %Y %H:%M:%S")
>>> 'Fri, 06 Feb 2015 17:45:09'
datetime.now()
geçerli saati yerel saat dilimindeki zamanı temsil eden naif bir datetime nesnesi olarak döndürür. Bu değer belirsiz olabilir, örneğin DST geçişleri sırasında ("geri çekilme"). Belirsizliği önlemek için ya UTC saat dilimi kullanılmalıdır:
from datetime import datetime
utc_time = datetime.utcnow()
print(utc_time) # -> 2014-12-22 22:48:59.916417
Veya karşılık gelen saat dilimi bilgilerinin eklendiği saat dilimine duyarlı bir nesne (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
Do dir(date)
ya da paket dahil değişkenler. Değişkenle ilişkili tüm öznitelikleri ve yöntemleri alabilirsiniz.
import datetime
o olduğunu datetime.datetime.now()
\ n ise from datetime import datetime
o zaman olduğudatetime.now()
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'
Varsayılan olarak, now()
işlev çıktıyı YYYY-MM-DD HH:MM:SS:MS
biçiminde döndürür . Bir Python komut dosyasında geçerli tarih ve saati almak ve sonuçları ekrana yazdırmak için aşağıdaki örnek komut dosyasını kullanın. getDateTime1.py
Aşağıdaki içeriğe sahip bir dosya oluşturun .
import datetime
currentDT = datetime.datetime.now()
print (str(currentDT))
Çıktı aşağıdaki gibi görünür:
2018-03-01 17:03:46.759624
Bu soru sadece onun uğruna yeni bir cevaba ihtiyaç duymuyor ... parlak bir yeni-ish oyuncak / modül, ancak yeterli bir gerekçe. Bu Sarkaç kütüphanesi , oku besleyen doğal kusurlar ve hatalar dışında, okun denediği şeyleri gibi görünen .
Örneğin, orijinal sorunun cevabı:
>>> 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
Endişelenmek için birden fazla RFC ve ISO da dahil olmak üzere adresleme gerektiren birçok standart var. Hiç karıştırmayın; Endişelenme, biraz bakdir(pendulum.constants)
RFC ve ISO formatlarından biraz daha fazlası var.
Yerel derken ne demek istiyoruz? Yani:
>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>
Muhtemelen geri kalanlarınızın çoğu başka bir yerde demek.
Ve devam ediyor. Uzun lafın kısası: Sarkaç, HTTP için isteklerin ne yaptığını tarih ve saat için yapmaya çalışır. Özellikle hem kullanım kolaylığı hem de kapsamlı belgeler için dikkate değer.
Saat diliminin geçerli saati
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
Http://crsmithdev.com/arrow/ adresinden ok modülünü deneyin :
import arrow
arrow.now()
Veya UTC sürümü:
arrow.utcnow()
Çıktısını değiştirmek için .format () öğesini ekleyin:
arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')
Belirli bir saat dilimi için:
arrow.now('US/Pacific')
Bir saat önce:
arrow.utcnow().replace(hours=-1)
Ya da gist istiyorsan.
arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'
arrow.now('Time/Zone')
(bazı saat dilimleri için başarısız olabilir arrow
kullanımları dateutil
utc kırıldı -> yerel dönüşümler kullanılan içindedir arrow.now()
Not:. pytz
Böyle sorunu var Ayrıca. , diğer zaman dilimi alakalı sorunlar vardır
Milisaniye ile zaman almak istiyorum. Onları almanın basit bir yolu:
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
Ama sadece milisaniye istiyorum , değil mi? Onları almanın en kısa yolu:
import time
time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751
Ondalık nokta sayısını ayarlamak için son çarpmada sıfır ekleyin veya kaldırın:
def get_time_str(decimal_points=3):
return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)
Zamanı almak için bu işlevi kullanabilirsiniz (maalesef AM veya PM demiyor):
def gettime():
from datetime import datetime
return ((str(datetime.now())).split(' ')[1]).split('.')[0]
Daha sonra birleştirilecek saatleri, dakikaları, saniyeleri ve milisaniyeleri almak için şu işlevleri kullanabilirsiniz:
Saat:
def gethour():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]
Dakika:
def getminute():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]
İkinci:
def getsecond():
from datetime import datetime
return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]
Milisaniye:
def getmillisecond():
from datetime import datetime
return (str(datetime.now())).split('.')[1]
Sadece ms cinsinden geçerli zaman damgasını istiyorsanız (örneğin, yürütme süresini ölçmek için), "timeit" modülünü de kullanabilirsiniz:
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))
Aşağıdakileri formatlamak zorunda kalmadan almak için kullanıyorum. Bazı insanlar split yöntemini sevmez, ancak burada yararlıdır:
from time import ctime
print ctime().split()[3]
SS: DD: SS formatında yazdırılır.
Henüz kimse bundan bahsetmedi ve bu son zamanlarda karşılaştığım bir şey ... datetime'ın utcnow () ile birleştirilmiş bir pytz timezone's fromutc () yöntemi, yararlı bir geçerli saat (ve tarih) almanın en iyi yoludur herhangi bir saat diliminde.
from datetime import datetime
import pytz
JST = pytz.timezone("Asia/Tokyo")
local_time = JST.fromutc(datetime.utcnow())
İstediğiniz tek şey zamansa, bunu alabilirsiniz local_time.time()
.
Bu soru Python içindir, ancak Django Python için en yaygın kullanılan çerçevelerden biri olduğundan, Django kullanıyorsanız, timezone.now()
bunun yerine her zaman kullanabileceğinizi not etmek önemlidir datetime.datetime.now()
. Birincisi saat dilimi 'farkında', ikincisi ise değil.
Bkz bu SO cevabı ve Django doc detayları ve mantığı arkasına için timezone.now()
.
from django.utils import timezone
now = timezone.now()
Bunu ctime () kullanarak yapabilirsiniz:
from time import time, ctime
t = time()
ctime(t)
çıktı:
Sat Sep 14 21:27:08 2019
Bu çıktılar farklıdır, çünkü döndürülen zaman damgası ctime()
coğrafi konumunuza bağlıdır.