Lors de l'utilisation de Python strftime
, existe-t-il un moyen de supprimer le premier 0 de la date si c'est avant le 10, c'est-à-dire. il en 01
est de même 1
? Vous ne trouvez pas quelque %
chose pour ça?
Merci!
En fait, j'ai eu le même problème et j'ai réalisé que si vous ajoutez un trait d'union entre la %
et la lettre, vous pouvez supprimer le zéro de tête.
Par exemple %Y/%-m/%-d
.
Cela ne fonctionne que sous Unix (Linux, OS X), pas Windows (y compris Cygwin). Sous Windows, vous utiliseriez #
, par exemple %Y/%#m/%#d
.
ValueError: '-' is a bad directive in format '%b %-d, %Y'
. OSX, Python 2.7.%#d
ferait la même chose sur WindowsNous pouvons faire ce genre de chose avec l'avènement de la
format
méthode depuis python2.6:Bien que cela dépasse peut-être la portée de la question d'origine, pour des formats plus intéressants, vous pouvez faire des choses comme:
Et à partir de python3.6, cela peut être exprimé comme une chaîne formatée en ligne :
la source
time.strftime('%A %B %d, %Y')
qui donne (maintenant, en anglais)Tuesday October 07, 2014
.__format__
hook très intéressant qui vous permet d'écrire des choses comme ça.'{dt.hour}'
utilise une horloge de 24 heures :(. L'utilisation de la deuxième option vous ramène toujours à l'utilisation'{%#I}'
sur Windows et'{%-I}'
sur Unix.Certaines plates-formes peuvent prendre en charge la spécification de largeur et de précision entre
%
et la lettre (comme «d» pour le jour du mois), selon http://docs.python.org/library/time.html - mais c'est certainement un non portable (par exemple ne fonctionne pas sur mon Mac ;-). Peut-être pouvez-vous utiliser un remplacement de chaîne (ou RE, pour un format vraiment désagréable) aprèsstrftime
pour y remédier? par exemple:la source
Voici la documentation des modificateurs supportés par
strftime()
dans la bibliothèque GNU C. (Comme les gens l'ont dit auparavant, il pourrait ne pas être portable.) Vous pourriez être intéressé par:%e
au lieu de%d
remplacera le zéro devant le jour du mois par un espaceCela fonctionne sur mon Python (sous Linux). Je ne sais pas si cela fonctionnera sur le vôtre.
la source
%-d
ci - dessus , cela fonctionne sous OS X 10.8.5 avec Python 2.7.2, mais pas sous Windows 7 Pro 64 bits avec Python 2.7.3.la source
.replace('X0','X').replace('X','')
? Faites-le.replace('X0', '')
et ce sera bien.Sous Windows, ajoutez un '#', comme dans '% # m /% # d /% Y% # I:% M:% S% p'
Pour référence: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
la source
assez tard pour la fête mais
%-d
fonctionne de mon côté.datetime.now().strftime('%B %-d, %Y')
produit quelque chose comme "5 novembre 2014"à votre santé :)
la source
ValueError: Invalid format string
dans mon système Windows.Je trouve que le filtre de formatage de la date du modèle Django est rapide et facile. Il supprime les zéros non significatifs. Si cela ne vous dérange pas d'importer le module Django, vérifiez-le.
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
la source
import django.conf
django.conf.settings.configure()
Jetez un œil au
-
soufflet:la source
utilisez simplement
replace
comme ceci:(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
il affichera:
la source
Car
%d
vous pouvez convertir en entier en utilisantint()
alors il supprimera automatiquement le 0 en tête et deviendra entier. Vous pouvez ensuite reconvertir en chaîne à l'aide destr()
.la source
utiliser, par exemple, "% -d" n'est pas portable même entre différentes versions du même système d'exploitation. Une meilleure solution serait d'extraire les composants de date individuellement et de choisir entre les opérateurs de formatage spécifiques à la date et l'accès aux attributs de date pour chaque composant.
la source
Parce que Python appelle vraiment la
strftime(3)
fonction de langage C sur votre plate-forme, il se peut qu'il y ait des caractères de format que vous pouvez utiliser pour contrôler le zéro de tête; essayez deman strftime
jeter un oeil. Mais, bien sûr, le résultat ne sera pas portable, comme le manuel Python vous le rappellera. :-)J'essaierais d'utiliser un
datetime
objet de nouveau style à la place, qui a des attributs commet.year
ett.month
ett.day
, et de les soumettre au formatage normal et puissant de l'%
opérateur, qui prend en charge le contrôle des zéros non significatifs. Voir http://docs.python.org/library/datetime.html pour plus de détails. Mieux encore, utilisez l'"".format()
opérateur si votre Python l'a et soyez encore plus moderne; il dispose également de nombreuses options de format pour les nombres. Voir: http://docs.python.org/library/string.html#string-formatting .la source
Basé sur la méthode d'Alex, cela fonctionnera à la fois pour les cas de début de chaîne et d'après-espaces:
J'aime mieux cela que .format ou% -d parce que c'est multiplateforme et me permet de continuer à utiliser strftime (pour obtenir des choses comme "novembre" et "lundi").
la source
Vieille question, mais% l (minuscule L) a fonctionné pour moi en strftime: cela peut ne pas fonctionner pour tout le monde, car il n'est pas répertorié dans la documentation Python que j'ai trouvée
la source
la source
ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y'
en utilisant python 3.5