Voici mon code:
import datetime
today = datetime.date.today()
print(today)
Cela imprime: 2008-11-22
c'est exactement ce que je veux.
Mais, j'ai une liste à laquelle j'ajoute cela, puis tout à coup, tout devient "bancal". Voici le code:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print(mylist)
Cela imprime les éléments suivants:
[datetime.date(2008, 11, 22)]
Comment puis-je obtenir juste une date simple comme 2008-11-22
?
str()
(à chaque élément de la liste), car c'est exactement ce qui aprint
implicitement fait pour votretoday
objet solo .Réponses:
POURQUOI: les dates sont des objets
En Python, les dates sont des objets. Par conséquent, lorsque vous les manipulez, vous manipulez des objets, pas des chaînes, ni des horodatages ni rien.
Tout objet en Python a DEUX représentations de chaîne:
La représentation régulière utilisée par "print" peut être obtenue en utilisant la
str()
fonction. C'est la plupart du temps le format lisible par l'homme le plus courant et est utilisé pour faciliter l'affichage.str(datetime.datetime(2008, 11, 22, 19, 53, 42))
Vous donne donc'2008-11-22 19:53:42'
.Représentation alternative utilisée pour représenter la nature de l'objet (sous forme de données). Il peut être utile d'utiliser la
repr()
fonction et est pratique pour savoir quel type de données vous manipulez pendant que vous développez ou déboguez.repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
vous donne'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.Ce qui s'est passé, c'est que lorsque vous avez imprimé la date en utilisant "print", il a utilisé
str()
pour que vous puissiez voir une belle chaîne de date. Mais lorsque vous avez imprimémylist
, vous avez imprimé une liste d'objets et Python a essayé de représenter l'ensemble de données à l'aide derepr()
.Le Comment: que voulez-vous en faire?
Eh bien, lorsque vous manipulez des dates, continuez à utiliser les objets de date tout au long du processus. Ils ont obtenu des milliers de méthodes utiles et la plupart des API Python s'attendent à ce que les dates soient des objets.
Lorsque vous souhaitez les afficher, utilisez simplement
str()
. En Python, la bonne pratique consiste à tout convertir explicitement. Donc, juste au moment d'imprimer, obtenez une représentation sous forme de chaîne de votre date en utilisantstr(date)
.Une dernière chose. Lorsque vous avez essayé d'imprimer les dates, vous avez imprimé
mylist
. Si vous souhaitez imprimer une date, vous devez imprimer les objets de date, pas leur conteneur (la liste).EG, vous voulez imprimer toute la date dans une liste:
Notez que dans ce cas spécifique , vous pouvez même l'omettre
str()
car print l'utilisera pour vous. Mais cela ne devrait pas devenir une habitude :-)Cas pratique, en utilisant votre code
Formatage de date avancé
Les dates ont une représentation par défaut, mais vous souhaiterez peut-être les imprimer dans un format spécifique. Dans ce cas, vous pouvez obtenir une représentation de chaîne personnalisée à l'aide de la
strftime()
méthode.strftime()
attend un modèle de chaîne expliquant comment vous souhaitez formater votre date.PAR EXEMPLE :
Toutes les lettres après un
"%"
représentent un format pour quelque chose:%d
est le numéro du jour%m
est le numéro du mois%b
est l'abréviation du mois%y
est l'année des deux derniers chiffres%Y
est toute l'annéeetc
Jetez un œil à la documentation officielle ou à la référence rapide de McCutchen, vous ne pouvez pas tous les connaître.
Depuis PEP3101 , chaque objet peut avoir son propre format utilisé automatiquement par le format de méthode de n'importe quelle chaîne. Dans le cas du datetime, le format est le même que celui utilisé dans strftime. Vous pouvez donc faire la même chose que ci-dessus comme ceci:
L'avantage de ce formulaire est que vous pouvez également convertir d'autres objets en même temps.
Avec l'introduction des littéraux de chaîne formatés (depuis Python 3.6, 2016-12-23), cela peut être écrit comme
Localisation
Les dates peuvent s'adapter automatiquement à la langue et à la culture locales si vous les utilisez correctement, mais c'est un peu compliqué. Peut-être pour une autre question sur SO (Stack Overflow) ;-)
la source
inspect.isclass
pour vous en assurer). Les gens ont tendance à dire "type" pour les éléments intégrés et "classe" pour le reste, mais ce n'est pas importantÉditer:
Après la suggestion de Cees, j'ai également commencé à utiliser le temps:
la source
datetime.datetime
?datetime import datetime
, puisprint datetime().now().strftime("%Y-%m-%d %H:%M")
. Seulement une différence de syntaxe.from datetime import date; date.today().strftime("%Y-%m-%d")
me semble toujours impythonique, mais c'est le meilleur sansimport time
. Je pense que le module datetime est pour les mathématiques de date.from datetime import datetime as dt
et maintenant nous pouvons jouer avecdt.now()
Les objets date, datetime et time prennent tous en charge une méthode strftime (format) pour créer une chaîne représentant l'heure sous le contrôle d'une chaîne de format explicite.
Voici une liste des codes de format avec leur directive et leur signification.
C'est ce que nous pouvons faire avec les modules datetime et time en Python
Cela imprimera quelque chose comme ceci:
la source
Utilisez date.strftime. Les arguments de formatage sont décrits dans la documentation .
Celui-ci est ce que vous vouliez:
Celui-ci prend en compte Locale. (fais ça)
la source
C'est plus court:
la source
la source
Ou même
Sortie: '25 .12.2013
ou
Sortie: 'Aujourd'hui - 25.12.2013'
Sortie: «mercredi»
Sortie: '__main ____ 2014.06.09__16-56.log'
la source
Réponse simple -
la source
Avec un
datetime
formatage de chaîne spécifique au type (voir la réponse de nk9 en utilisantstr.format()
.) Dans un littéral de chaîne formaté (depuis Python 3.6, 2016-12-23):Les directives de format de date / heure ne sont pas documentés dans le cadre de la chaîne de format de syntaxe , mais plutôt
date
,datetime
ettime
de »strftime()
la documentation. Ils sont basés sur la norme C de 1989, mais incluent certaines directives ISO 8601 depuis Python 3.6.la source
Vous devez convertir l'objet date-heure en chaîne.
Le code suivant a fonctionné pour moi:
Faites-moi savoir si vous avez besoin d'aide.
la source
Je déteste l'idée d'importer trop de modules pour plus de commodité. Je préfère travailler avec le module disponible qui dans ce cas est
datetime
plutôt que d'appeler un nouveau moduletime
.la source
a = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
Tu peux faire:
la source
Compte tenu du fait que vous avez demandé quelque chose de simple pour faire ce que vous vouliez, vous pouvez simplement:
la source
Pour ceux qui souhaitent une date basée sur les paramètres régionaux et n'incluant pas l'heure, utilisez:
la source
Vous pouvez l'ajouter en tant que chaîne?
la source
Puisque le
print today
retourne ce que vous voulez, cela signifie que la__str__
fonction de l'objet d'aujourd'hui renvoie la chaîne que vous recherchez.Vous pouvez donc faire
mylist.append(today.__str__())
de même.la source
Vous pouvez utiliser easy_date pour simplifier:
la source
Un avertissement rapide pour ma réponse - je n'apprends le Python que depuis environ 2 semaines, donc je ne suis en aucun cas un expert; par conséquent, mon explication n'est peut-être pas la meilleure et je peux utiliser une terminologie incorrecte. Bref, c'est parti.
J'ai remarqué dans votre code que lorsque vous avez déclaré votre variable,
today = datetime.date.today()
vous avez choisi de nommer votre variable avec le nom d'une fonction intégrée.Lorsque votre prochaine ligne de code a
mylist.append(today)
ajouté votre liste, elle a ajouté la chaîne entièredatetime.date.today()
, que vous aviez précédemment définie comme valeur de votretoday
variable, plutôt que d'ajouter simplementtoday()
.Une solution simple, bien que peut-être pas celle que la plupart des codeurs utiliseraient pour travailler avec le module datetime, est de changer le nom de votre variable.
Voici ce que j'ai essayé:
et il imprime
yyyy-mm-dd
.la source
Voici comment afficher la date au format (année / mois / jour):
la source
cela imprimera le 23/06/2018 si c'est ce que vous voulez :)
la source
De cette façon, vous pouvez obtenir la date formatée comme cet exemple: 22-Jun-2017
la source
%b
vous, vous obtiendrez les premiers mots de trois mois, et avec%B
le mois entier. Exemple:datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S")
retournera '2018-oct-04 09:44:08'Je ne comprends pas tout à fait, mais je peux utiliser
pandas
pour obtenir des temps au bon format:Et:
Mais il stocke des chaînes mais est facile à convertir:
la source