Lorsque vous utilisez Python strftime
, existe-t-il un moyen de supprimer le premier 0 de la date s'il se situe avant le 10, c'est-à-dire. alors 01
est 1
? Vous ne trouvez pas un %
thingy pour cela?
Merci!
En fait, j'ai eu le même problème et je me suis rendu compte que, si vous ajoutez un trait d'union entre le %
et la lettre, vous pouvez supprimer le zéro non significatif.
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
.
Nous pouvons faire ce genre de chose avec l'avènement de la méthode format
depuis python2.6:
>>> import datetime
>>> '{dt.year}/{dt.month}/{dt.day}'.format(dt = datetime.datetime.now())
'2013/4/19'
Peut-être au-delà de la question initiale, pour des formats plus intéressants, vous pouvez faire des choses comme:
>>> '{dt:%A} {dt:%B} {dt.day}, {dt.year}'.format(dt=datetime.datetime.now())
'Wednesday December 3, 2014'
Et à partir de python3.6, cela peut être exprimé par une chaîne formatée inline :
Python 3.6.0a2 (v3.6.0a2:378893423552, Jun 13 2016, 14:44:21)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> dt = datetime.datetime.now()
>>> f'{dt:%A} {dt:%B} {dt.day}, {dt.year}'
'Monday August 29, 2016'
Certaines plates-formes peuvent prendre en charge la spécification de largeur et de précision entre %
et la lettre (telle que "d" pour le jour du mois), selon http://docs.python.org/library/time.html - mais c’est certainement une solution non portable (par exemple, ne fonctionne pas sur mon Mac ;-). Peut-être que vous pouvez utiliser une chaîne de remplacement (ou RE, pour le format vraiment méchant) après la strftime
pour remédier à cela? par exemple.:
>>> y
(2009, 5, 7, 17, 17, 17, 3, 127, 1)
>>> time.strftime('%Y %m %d', y)
'2009 05 07'
>>> time.strftime('%Y %m %d', y).replace(' 0', ' ')
'2009 5 7'
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
Ici est la documentation des modificateurs supportés par strftime()
dans la bibliothèque GNU C. (Comme on l'a déjà dit, cela pourrait ne pas être portable.) Ce qui pourrait vous intéresser pourrait être:
%e
au lieu de %d
remplacera le zéro non significatif du jour du mois par un espaceCela fonctionne sur mon Python (sous Linux). Je ne sais pas si cela fonctionnera sur le vôtre.
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é :)
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
Je trouve que le filtre de formatage de date de modèle Django est simple et rapide. 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
from Django.template.defaultfilters import date as Django_date_filter
print Django_date_filter(mydate, 'P, D M j, Y')
Jetez un oeil à -
ci-dessous:
>>> from datetime import datetime
>>> datetime.now().strftime('%d-%b-%Y')
>>> '08-Oct-2011'
>>> datetime.now().strftime('%-d-%b-%Y')
>>> '8-Oct-2011'
>>> today = datetime.date.today()
>>> today.strftime('%d-%b-%Y')
>>> print(today)
utilisez simplement replace
comme ceci:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
il produira:
'2017/7/21'
Sur la base de la méthode d'Alex, cela fonctionnera à la fois pour les cas de début de chaîne et d'après-espaces:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
J'aime mieux cela que. Format ou% -d parce que c'est multi-plateforme et me permet de continuer à utiliser strftime (pour obtenir des choses comme "novembre" et "lundi").
Pour %d
, vous pouvez convertir en entier à l'aide de int()
. Le 0 initial sera automatiquement supprimé et deviendra un entier. Vous pouvez ensuite reconvertir en chaîne à l'aide de str()
.
Ancienne question, mais% l (minuscule L) a fonctionné pour moi dans strftime: cela ne fonctionnera peut-être pas pour tout le monde, cependant, car cela ne figure pas dans la documentation Python que j'ai trouvée
Étant donné que Python appelle simplement la fonction strftime(3)
du langage C sur votre plate-forme, il est possible que vous utilisiez des caractères de format que vous pourriez utiliser pour contrôler le zéro non significatif; essayez man strftime
et jetez un coup d'oeil. Mais, bien sûr, le résultat ne sera pas portable, comme le manuel Python vous le rappellera. :-)
J'essaierais plutôt d'utiliser un objet datetime
de style nouveau, qui possède des attributs tels que t.year
et t.month
et t.day
, et de les placer dans le 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'opérateur "".format()
si votre Python en est équipé et soyez encore plus moderne; il a aussi beaucoup d'options de format pour les nombres. Voir: http://docs.python.org/library/string.html#string-formatting .
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
utiliser, par exemple, "% -d" n'est pas portable, même entre différentes versions du même système d'exploitation . Une meilleure solution consisterait à extraire les composants de date individuellement et à choisir entre des opérateurs de formatage spécifiques à la date et un accès par attribut de composant.
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)