Question Comment obtenir l'heure actuelle en Python


Quel est le module / méthode utilisé pour obtenir l'heure actuelle?


1950
2018-01-06 04:54


origine


Réponses:


Utilisation:

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

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

Et juste le temps:

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

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

La même chose, mais légèrement plus compacte:

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

Voir La documentation pour plus d'informations.

Pour enregistrer la frappe, vous pouvez importer le datetime objet de la datetime module:

>>> from datetime import datetime

Ensuite, supprimez le premier datetime. de tout ce qui précède.


1991
2018-01-06 04:57



Vous pouvez utiliser 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



Semblable à La réponse de Harley, mais utilisez le str() fonction pour un format lisible rapidement et légèrement plus humain:

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

Pour cet exemple, la sortie sera comme ceci: '2013-09-18 11:16:32'

Voici la liste des strftime.


367
2018-01-09 05:50



Comment puis-je obtenir l'heure actuelle en Python?

le time module

le time module fournit des fonctions qui nous indique l'heure en "secondes depuis l'époque" ainsi que d'autres utilitaires.

import time

Unix Epoch Time

C'est le format que vous devriez avoir dans l'horodatage pour l'enregistrement dans les bases de données. C'est un simple nombre à virgule flottante qui peut être converti en entier. Il est également bon pour l'arithmétique en secondes, car il représente le nombre de secondes depuis le 1er janvier 1970 00:00:00, et c'est la lumière de la mémoire par rapport aux autres représentations du temps que nous verrons ensuite:

>>> time.time()
1424233311.771502

Cet horodatage ne tient pas compte des secondes intercalaires, donc ce n'est pas linéaire - les secondes intercalaires sont ignorées. Donc, bien qu'il ne soit pas équivalent à la norme internationale UTC, il est proche, et donc très bon pour la plupart des cas d'archivage.

Cependant, ce n'est pas idéal pour la planification humaine. Si vous souhaitez qu'un événement futur se produise à un moment donné, vous devez stocker cette heure avec une chaîne qui peut être analysée dans un objet datetime ou un objet datetime sérialisé (ceux-ci seront décrits plus loin).

time.ctime

Vous pouvez également représenter l'heure actuelle de la manière préférée par votre système d'exploitation (ce qui signifie qu'elle peut changer lorsque vous modifiez vos préférences système, ne vous fiez donc pas à cette norme sur tous les systèmes, comme d'autres l'ont prévu) . Ceci est typiquement convivial, mais n'entraîne généralement pas de chaînes chronologiques:

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

Vous pouvez hydrater les horodatages en forme lisible par l'homme avec ctime ainsi que:

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

Cette conversion n'est pas bonne non plus pour la tenue de dossiers (sauf dans un texte qui ne sera analysé que par des humains) et avec l'amélioration de la reconnaissance optique de caractères et de l'intelligence artificielle, je pense que le nombre de ces cas diminuera.

datetime module

le datetime module est également très utile ici:

>>> import datetime

datetime.datetime.now

le datetime.now est une méthode de classe qui renvoie l'heure actuelle. Il utilise le time.localtime sans les informations sur le fuseau horaire (si elles ne sont pas données, sinon consultez le fuseau horaire ci-dessous). Il a une représentation (qui vous permettrait de recréer un objet équivalent) écho sur le shell, mais lorsqu'il est imprimé (ou contraint à un str), il est en format lisible par l'homme (et presque ISO), et le genre lexicographique est équivalent au genre chronologique:

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

datetime utcnow

Vous pouvez obtenir un objet datetime au format UTC, un standard global, en procédant comme suit:

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

UTC est une norme de temps qui est presque équivalente au fuseau horaire GMT. (Alors que GMT et UTC ne changent pas pour l'heure avancée, leurs utilisateurs peuvent passer à d'autres fuseaux horaires, comme l'heure d'été britannique, pendant l'été.)

Prise en compte de la date et du fuseau horaire

Cependant, aucun des objets datetime que nous avons créés jusqu'à présent ne peut être facilement converti en plusieurs fuseaux horaires. Nous pouvons résoudre ce problème avec le pytz module:

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

De manière équivalente, dans Python 3, nous avons timezone cours avec un utc timezone instance jointe, ce qui rend également l'objet timezone conscient (mais pour convertir à un autre fuseau horaire sans le pratique pytz module est laissé comme un exercice au lecteur):

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

Et nous voyons que nous pouvons facilement convertir en timezones à partir de l'objet utc d'origine.

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

Vous pouvez également créer un objet datetime naïf avec le pytz fuseau horaire localize ou en remplaçant l'attribut tzinfo (avec replace, ceci est fait aveuglément), mais ce sont plus les dernières stations que les meilleures pratiques:

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

le pytz module nous permet de faire notre datetime objets timezone conscient et convertir les temps aux centaines de fuseaux horaires disponibles dans le pytz module.

On pourrait ostensiblement sérialiser cet objet pour l'heure UTC et stocker cette dans une base de données, mais il faudrait beaucoup plus de mémoire et être plus enclin à l'erreur que simplement stocker l'heure Unix Epoch, que j'ai démontré en premier.

Les autres façons d'afficher les heures sont beaucoup plus sujettes aux erreurs, en particulier lorsqu'il s'agit de données qui peuvent provenir de fuseaux horaires différents. Vous voulez qu'il n'y ait aucune confusion quant au fuseau horaire auquel une chaîne ou un objet datetime sérialisé était destiné.

Si vous affichez l'heure avec Python pour l'utilisateur, ctime fonctionne bien, pas dans une table (il ne se distingue généralement pas bien), mais peut-être dans une horloge. Cependant, je recommande personnellement, en traitant le temps en Python, soit en utilisant l'heure d'Unix, ou un fuseau horaire conscient UTC datetime objet.


203
2018-02-18 05:08



Faire

from time import time

t = time()
  • t - nombre flottant, bon pour la mesure d'intervalle de temps.

Il y a une différence pour les plateformes Unix et Windows.


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'

Cela sort le GMT actuel dans le format spécifié. Il existe également une méthode localtime ().

Ce page a plus de détails.


83
2018-01-06 05:02