jour - strftime python




Comment obtenir l'heure actuelle en Python (20)

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


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

Le module time

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

import time

Époque Unix

C'est le format dans lequel vous devez entrer des horodatages pour l'enregistrement dans les bases de données. C'est un simple nombre à virgule flottante qui peut être converti en un 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 il est léger en mémoire par rapport aux autres représentations du temps que nous examinerons ensuite:

>>> time.time()
1424233311.771502

Cet horodatage ne prend pas en compte les secondes intercalaires, il n'est donc pas linéaire - les secondes intercalaires sont ignorées. Ainsi, bien qu’elle ne soit pas équivalente à la norme internationale UTC, elle est proche, et donc très bonne pour la plupart des cas de tenue de registres.

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

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 que cela peut changer lorsque vous modifiez vos préférences système. Ne vous fiez donc pas à cette norme pour tous les systèmes, comme les autres s'attendent à ce qu'elle soit). . Ceci est généralement convivial, mais ne génère généralement pas de chaînes pouvant être triées chronologiquement:

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

Vous pouvez également hydrater les horodatages sous une forme lisible par l'homme avec ctime :

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

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

module datetime

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

>>> import datetime

datetime.datetime.now

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

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

utcnow de utcnow

Vous pouvez obtenir un objet date / heure en heure UTC, une norme globale, 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

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

prise en compte du fuseau horaire datetime

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

>>> 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 la classe timezone avec une instance utc timezone attachée, ce qui rend également l'objet timezone conscient (mais la conversion en un autre fuseau horaire sans le module pytz pratique est laissée sous forme d'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 les fuseaux horaires de l’objet utc original.

>>> 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 mettre en pytz un objet datetime naïf avec la méthode pytz timezone localize ou en remplaçant l'attribut tzinfo (avec replace , cela se fait à l'aveuglette), mais il s'agit davantage d'un dernier recours que d'une meilleure pratique:

>>> 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 module pytz nous permet d’indiquer à nos objets datetime fuseau horaire et de les convertir en centaines de fuseaux horaires disponibles dans le module pytz .

On pourrait ostensiblement sérialiser cet objet pour l'heure UTC et le stocker dans une base de données, mais cela demanderait beaucoup plus de mémoire et serait plus sujet aux erreurs que de simplement stocker l'heure Unix Epoch, que j'ai d'abord démontrée.

Les autres modes d'affichage des heures sont beaucoup plus sujets aux erreurs, en particulier lorsqu'il s'agit de traiter des données provenant de différents fuseaux horaires. Vous voulez qu'il n'y ait pas de confusion quant au fuseau horaire auquel une chaîne ou un objet date / heure sérialisé était destiné.

Si vous ctime l'heure avec Python pour l'utilisateur, ctime fonctionne bien, pas dans un tableau (il ne ctime généralement pas bien), mais peut-être dans une horloge. Cependant, je recommande personnellement, lorsque vous utilisez l'heure Python, d'utiliser l'heure Unix ou un objet datetime heure UTC sensible au fuseau horaire.


C'est ce que j'ai fini par aller avec:

>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11

De plus, ce tableau est une référence nécessaire pour choisir les codes de format appropriés afin que la date soit formatée exactement comme vous le souhaitez (à partir de la documentation "datetime" de Python here ).


Cette question n'a pas besoin d'une nouvelle réponse pour le plaisir de le faire ... un jouet / module nouveau et brillant, cependant, est une justification suffisante. C’est la bibliothèque Pendulum , qui semble faire le genre de choses que arrow a tenté de faire, sauf sans les défauts et bogues inhérents à la flèche.

Par exemple, la réponse à la question initiale:

>>> import pendulum
>>> print(pendulum.now())
2018-08-14T05:29:28.315802+10:00
>>> print(pendulum.utcnow())
2018-08-13T19:29:35.051023+00:00

Il faut se préoccuper de nombreuses normes, y compris de nombreux RFC et ISO. Jamais les mêler; ne vous inquiétez pas, jetez un coup d'œil dans dir(pendulum.constants) Il y a cependant un peu plus que les formats RFC et ISO.

Quand on dit local, que veut-on dire? Bien je veux dire:

>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>

On peut supposer que la plupart d'entre vous pensent ailleurs.

Et ça continue. Longue histoire: Pendulum tente de faire pour la date et l'heure ce que les requêtes ont fait pour HTTP. Cela vaut la peine d’être pris en considération, en particulier pour sa facilité d’utilisation et sa documentation exhaustive.


Commencez par importer le module datetime à partir de datetime

from datetime import datetime

Ensuite, affichez l'heure actuelle sous la forme 'aaaa-mm-jj hh: mm: ss'

print(str(datetime.now())

Pour obtenir uniquement le temps sous la forme 'hh: mm: ss' où ss représente le nombre total de secondes plus la fraction de secondes écoulée, il suffit de faire;

print(str(datetime.now()[11:])

La conversion de datetime.now () en chaîne génère une réponse dont le format ressemble à celui des DATES AND TIMES classiques auxquelles nous sommes habitués.


Faire

from time import time

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

Il existe une différence entre les plateformes Unix et Windows.


Je veux avoir le temps avec des millisecondes. Un moyen simple de les obtenir:

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

Mais je ne veux que quelques millisecondes , non? Le moyen le plus court pour les obtenir:

import time

time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751

Ajoutez ou supprimez des zéros de la dernière multiplication pour ajuster le nombre de points décimaux, ou simplement:

def get_time_str(decimal_points=3):
    return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)

Par défaut, la fonction now() renvoie la sortie au YYYY-MM-DD HH:MM:SS:MS . Utilisez l'exemple de script ci-dessous pour obtenir la date et l'heure actuelles dans un script Python et imprimer les résultats à l'écran. Créez le fichier getDateTime1.py avec le contenu ci-dessous.

import datetime

currentDT = datetime.datetime.now()
print (str(currentDT))

La sortie ressemble à celle ci-dessous:

2018-03-01 17:03:46.759624

Pourquoi ne pas demander à l' observatoire naval américain , le chronomètre officiel de la marine américaine?

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

Si vous habitez dans la région de Washington (comme moi), le temps de latence n'est peut-être pas si mauvais…


Si vous avez besoin de l'heure actuelle en tant qu'objet de time :

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)

Si vous utilisez déjà NumPy, vous pouvez directement utiliser la fonction numpy.datetime64 ().

import numpy as np
str(np.datetime64('now'))

Pour seulement la date:

str(np.datetime64('today'))

Ou, si vous utilisez déjà des pandas, vous pouvez utiliser la fonction pandas.to_datetime ():

import pandas as pd
str(pd.to_datetime('now'))

Ou:

str(pd.to_datetime('today'))

Simple et facile:

En utilisant le module datetime ,

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

Sortie:

2017-10-17 23:48:55

OU

En utilisant le time ,

import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))

Sortie:

2017-10-17 18:22:26

Toutes les bonnes suggestions, mais je trouve plus facile d'utiliser ctime() moi-même:

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

Cela donne une représentation sous forme de chaîne joliment formatée de l'heure locale actuelle.


Utiliser les Pandas pour obtenir l’heure actuelle, en quelque sorte tuer le problème:

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)

Sortie:

2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693

Vous pouvez utiliser time.strftime() :

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

Vous pouvez utiliser le module de time .

import time
print time.strftime("%d/%m/%Y")

>>> 06/02/2015

L’utilisation de la capitale Y donne l’année complète, et l’utilisation de y donnerait le 06/02/15 .

Vous pouvez également utiliser pour donner un temps plus long.

time.strftime("%a, %d %b %Y %H:%M:%S")
>>> 'Fri, 06 Feb 2015 17:45:09'

.isoformat() est dans la documentation, mais pas encore ici (c'est très similaire à la réponse de @Ray Vega):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'

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

Pour cet exemple, le résultat sera le suivant: '2013-09-18 11:16:32'

Voici la liste de strftime .


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

Cela affiche l'heure GMT actuelle au format spécifié. Il existe également une méthode localtime ().

Cette page a plus de détails.


from time import ctime

// Day {Mon,Tue,..}
print ctime().split()[0]
// Month {Jan, Feb,..}
print ctime().split()[1]
// Date {1,2,..}
print ctime().split()[2]
// HH:MM:SS
print ctime().split()[3]
// Year {2018,..}
print ctime().split()[4]

Lorsque vous appelez ctime (), il convertit les secondes en chaîne au format 'Jour Mois Date HH: MM: SS Année' (par exemple: 'Mer 17 Janvier 16:53:22 2018'), puis vous appelez la méthode split () qui fera une liste à partir de votre chaîne ['Wed', 'Jan', '17', '16:56:45', '2018'] (le délimètre par défaut est l'espace).

Les crochets sont utilisés pour "sélectionner" l'argument recherché dans la liste.

Il ne faut appeler qu'une seule ligne de code. On ne devrait pas les appeler comme je le faisais, c’était juste un exemple, parce que dans certains cas, vous obtiendrez des valeurs différentes, des cas rares mais pas impossibles.


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

Ne dir(date) ou des variables, y compris le package. Vous pouvez obtenir tous les attributs et méthodes associés à la variable.





time