Existe-t-il un format d'impression des heures de données Python qui n'utilisera pas de remplissage nul sur les dates et les heures?
Format que j'utilise maintenant:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
Résultat: 29/02/2012 17:03
Désiré: 29/02/2012 17:03
Quel format représenterait le mois sous la forme «2» au lieu de «02» et l'heure sous la forme «5:03 PM» au lieu de «05: 03PM»
.lstrip("0")
à se débarrasser du zéro de tête.L'autre alternative pour éviter l'aspect zéro de début "tout ou rien" ci-dessus consiste à placer un signe moins devant le type de champ:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
Puis ceci: '4/10/2015 03:00 AM'
Devient: '4/10/2015 3:00 AM'
Vous pouvez éventuellement placer un signe moins devant le jour si vous le souhaitez.
Edit: La fonctionnalité minus dérive de la bibliothèque GNU C («glibc») comme mentionné dans la page de manuel Linux strftime sous «Glibc notes»
la source
date.__format__
outime.strftime
, docs.python.org/3/library/… et docs.python.org/3.8/library/time.html#time.strftime respectivementLe nouveau système de formatage des chaînes offre une alternative à
strftime
. C'est tout à fait lisible - en fait, cela pourrait être préférable pourstrftime
ce compte. Sans parler du fait qu'il ne met pas à zéro:>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now()) '3/1/2012'
Puisque vous voulez probablement un remplissage nul dans le champ des minutes, vous pouvez le faire:
>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now) '3/1/2012 20:00'
Si vous voulez du temps "normal" au lieu du temps "militaire", vous pouvez toujours utiliser les
strftime
spécificateurs standard . Idéalement, pour nos besoins,strftime
ne fournir un code pour la durée de 12 heures épaulette avec vide au lieu d'un zéro:'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now) '4/4/2014 6:00PM'
Cela devient un peu moins lisible, hélas. Et comme le souligne @mlissner,
strftime
échouera sur certaines (toutes?) Plates-formes pour des dates antérieures à 1900.la source
"{0.day} {0:%B %Y}".format(d)
qui vous donnerait'2 August 2013'
comme jour de ce commentaire :)Réponse acceptée pas une solution appropriée (IMHO) Les méthodes documentées appropriées:
Sous Linux, "#" est remplacé par "-":
% -d,% -H,% -I,% -j,% -m,% -M,% -S,% -U,% -w,% -W,% -y,% -Y
Sous Windows, "-" est remplacé par "#":
% # d,% # H,% # I,% # j,% # m,% # M,% # S,% # U,% # w,% # W,% # y,% # Y
#Linux mydatetime.strftime('%-m/%d/%Y %-I:%M%p') # Windows mydatetime.strftime('%#m/%d/%Y %#I:%M%p')
Source: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
Comme indiqué par Sagneta: L'astuce de hachage # sur Windows n'est disponible que pour l'exécutable python natif. cela ne fonctionnera pas pour les implémentations python basées sur cygwin.
la source
Bonne réponse de Chris Freeman sur Linux.
Sous Windows, c'est:
mydate.strftime('%#m/%#d/%Y')
J'ai pensé que cela pourrait aider.
la source
"% l" (c'est un L minuscule) fonctionne pendant l'heure (au lieu de "% I"). Je ne le sais que par une autre réponse ici
Python strftime - date sans 0 de début?
mais malheureusement, ils n'ont pas le code pour les autres éléments d'une date / heure.
la source