Vraag Hoe de huidige tijd in Python te krijgen


Wat is de module / methode die wordt gebruikt om de huidige tijd te krijgen?


1950
2018-01-06 04:54


oorsprong


antwoorden:


Gebruik:

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

>>> print(datetime.datetime.now())
2018-07-29 09:17:13.812189

En precies de tijd:

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

>>> print(datetime.datetime.time(datetime.datetime.now()))
09:17:51.914526

Hetzelfde, maar iets compacter:

>>> datetime.datetime.now().time()

Zien de documentatie voor meer informatie.

Om het typen te sparen, kunt u het importeren datetime object van de datetime module:

>>> from datetime import datetime

Verwijder vervolgens de leiding datetime. van al het bovenstaande.


1991
2018-01-06 04:57



Je kunt gebruiken time.strftime():

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

785
2018-01-06 04:59



Gelijkwaardig aan Harley's antwoord, maar gebruik de str() functie voor een quick-n-dirty, iets menselijker leesbaar formaat:

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

406
2018-05-04 00:56



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

Voor dit voorbeeld is de uitvoer als volgt: '2013-09-18 11:16:32'

Hier is de lijst van strftime.


367
2018-01-09 05:50



Hoe krijg ik de huidige tijd in Python?

De time module

De time module biedt functies die ons de tijd in "seconden sinds het tijdperk" en andere hulpprogramma's vertelt.

import time

Unix Epoch-tijd

Dit is het formaat waarin u tijdstempels moet krijgen voor het opslaan in databases. Het is een eenvoudig drijvend kommagetal dat kan worden geconverteerd naar een geheel getal. Het is ook goed voor rekenkundige bewerkingen in seconden, omdat het het aantal seconden sinds 1 januari 1970 00:00 00:00 representeert, en het is geheugenlicht ten opzichte van de andere representaties van tijd die we hierna zullen bekijken:

>>> time.time()
1424233311.771502

Deze tijdstempel houdt geen schrikkelseconden in, dus het is niet lineair - schrikkelseconden worden genegeerd. Dus hoewel het niet gelijk is aan de internationale UTC-standaard, is het dichtbij, en daarom best goed voor de meeste gevallen van registratie.

Dit is echter niet ideaal voor menselijke planning. Als u een toekomstige gebeurtenis hebt die u op een bepaald moment wilt plaatsvinden, dan wilt u die tijd opslaan met een tekenreeks die kan worden geparseerd in een datetime-object of een geserialiseerd datetime-object (deze worden later beschreven).

time.ctime

Je kunt de huidige tijd ook representeren op de manier die jouw besturingssysteem prefereert (wat betekent dat het kan veranderen als je je systeemvoorkeuren wijzigt, dus vertrouw er niet op dat dit standaard is voor alle systemen, zoals ik heb gezien dat anderen verwachten) . Dit is meestal gebruiksvriendelijk, maar resulteert meestal niet in tekenreeksen die chronologisch kunnen worden gesorteerd:

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

Je kunt tijdstempels hydrateren tot in mensen leesbare vorm ctime ook:

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

Deze conversie is ook niet goed voor het bijhouden van gegevens (behalve in tekst die alleen door mensen wordt geparseerd - en met verbeterde Optical Character Recognition en Artificial Intelligence denk ik dat het aantal van deze gevallen zal afnemen).

datetime module

De datetime module is ook erg handig hier:

>>> import datetime

datetime.datetime.now

De datetime.now is een klassemethode die de huidige tijd retourneert. Het gebruikt de time.localtime zonder de tijdzone-info (indien niet opgegeven, anders zie tijdzone hieronder). Het heeft een representatie (waarmee je een equivalent object opnieuw kunt creëren) dat op de schaal weergalmde, maar wanneer het werd afgedrukt (of gedwongen tot een str), het is in een door mensen leesbaar (en bijna ISO) formaat, en de lexicografische sortering is gelijk aan de chronologische sortering:

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

datetime's utcnow

U kunt een datetime-object in UTC-tijd krijgen, een algemene standaard, door dit te doen:

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

UTC is een tijdsstandaard die bijna gelijk is aan de GMT-tijdzone. (Terwijl GMT en UTC niet veranderen voor zomertijd, kunnen hun gebruikers tijdens de zomer overschakelen naar andere tijdzones, zoals British Summer Time.)

datetime tijdzone bewust

Geen van de datetime-objecten die we tot nu toe hebben gemaakt, kan echter eenvoudig worden geconverteerd naar verschillende tijdzones. We kunnen dat probleem oplossen met de pytz module:

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

Evenzo hebben we in Python 3 de timezone klasse met een utc timezone instantie is bijgevoegd, waardoor het object ook tijdzone kent (maar om te zetten naar een andere tijdzone zonder dat het handig is) pytz module wordt overgelaten aan de lezer):

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

En we zien dat we gemakkelijk kunnen converteren naar tijdzones van het oorspronkelijke utc-object.

>>> 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

Je kunt een naïef datetime-object ook bewust maken met de pytz tijdzone localize methode, of door het kenmerk tzinfo te vervangen (met replace, dit is blind gedaan), maar dit zijn meer laatste resorts dan de beste werkwijzen:

>>> 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>)

De pytz module stelt ons in staat om onze datetime objecten tijdzone bewust en zet de tijden om naar de honderden tijdzones die beschikbaar zijn in de pytz module.

Men zou dit object ogenschijnlijk kunnen serialiseren voor UTC-tijd en op te slaan dat in een database, maar het zou veel meer geheugen vereisen en meer foutgevoelig zijn dan eenvoudig de Unix Epoch-tijd opslaan, wat ik eerst heb aangetoond.

De andere manieren om tijden te bekijken zijn veel gevoeliger voor fouten, vooral als het gaat om gegevens die uit verschillende tijdzones kunnen komen. U wilt dat er geen verwarring bestaat over de tijdzone waarvoor een string of serialized datetime-object was bedoeld.

Als u de tijd met Python voor de gebruiker weergeeft, ctime werkt mooi, niet in een tabel (het sorteert meestal niet goed), maar misschien in een klok. Ik adviseer echter persoonlijk, wanneer je te maken hebt met tijd in Python, ofwel met behulp van Unix-tijd, of een tijdzone-bewuste UTC datetime voorwerp.


203
2018-02-18 05:08



Do

from time import time

t = time()
  • t - vlotternummer, goed voor tijdsintervalmeting.

Er is een verschil voor Unix- en Windows-platforms.


112
2018-01-06 13:55



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

Dat levert de huidige GMT in het opgegeven formaat op. Er is ook een methode localtime ().

Deze pagina heeft meer details.


83
2018-01-06 05:02



Alle goede suggesties, maar ik vind het het gemakkelijkst om te gebruiken ctime() mezelf:

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

Dit geeft een mooi opgemaakte tekenreeksrepresentatie van de huidige lokale tijd.


44
2017-10-31 15:39