Python strftime-date sans mener 0?
17 réponses
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 principal.
par exemple %Y/%-m/%-d
.
cela ne fonctionne que sur Unix (Linux, OS X), Pas Windows (y compris Cygwin). Sous Windows , vous utiliserez #
, 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'
bien que peut-être au-delà de la portée de la question originale, 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 as of python3.6, cela peut être exprimé comme une chaîne formatée en ligne :
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 supporter des spécifications 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 une solution non portable (par exemple ne fonctionne pas sur mon Mac; -). Peut-être Pouvez-vous utiliser une chaîne remplacer (ou RE, pour really nasty format) après le 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 les gens l'ont déjà dit, il se peut qu'il ne soit pas portatif.) Qui pourrait vous intéresser:
-
%e
au lieu de%d
remplacera le zéro en tête dans le jour du mois par un espace
il fonctionne sur mon Python (sous Linux). Je ne sais pas si ça marchera sur la vôtre.
assez tard pour la fête mais %-d
marche de mon côté.
datetime.now().strftime('%B %-d, %Y')
produit quelque chose comme "5 novembre 2014 "
cheers:)
Sur Windows, ajouter 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 pour être rapide et facile. Il efface les zéros de tête. 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')
regardez -
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)
pour %d
vous pouvez convertir en entier en utilisant int()
puis il supprimera automatiquement l'entrée 0 et devient entier. Vous pouvez ensuite convertir de nouveau en chaîne de caractères en utilisant str()
.
basé sur la méthode D'Alex, cela fonctionnera à la fois pour les cas de début de chaîne et après-espaces:
re.sub('^0|(?<= )0', '', "01 January 2000 08:00am")
j'aime mieux ça que ça .format ou % - d Parce que c'est multiplate-forme et me permet de continuer à utiliser strftime (pour obtenir des choses comme "novembre" et "lundi").
parce que Python appelle simplement la fonction C du langage strftime(3)
sur votre plate-forme, il se peut qu'il y ait des caractères de format que vous pourriez utiliser pour contrôler le zéro principal; essayez man strftime
et jetez un oeil. Mais, bien sûr, le résultat ne sera pas portable, comme le Python manuel va vous rappeler. :- )
je voudrais essayer d'utiliser un nouveau style datetime
objet à la place, qui a des attributs comme t.year
et t.month
et t.day
, et mettre ces par le formatage normal et puissant de l'opérateur %
, qui supporte le contrôle des zéros de tête. Voir http://docs.python.org/library/datetime.html pour plus de détails. Mieux encore, utilisez l'opérateur "".format()
si votre Python l'A et est encore plus moderne; il a beaucoup d'options de format pour les nombres aussi bien. Voir: http://docs.python.org/library/string.html#string-formatting .
vieille question, mais %l (Petit cas L) a travaillé pour moi dans strftime: cela ne fonctionne peut-être pas pour tout le monde, cependant, car il n'est pas répertorié dans la documentation Python que j'ai trouvé
utilisez simplement replace
comme ceci:
(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
il sortira:
'2017/7/21'
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
utilisant, par exemple," %- d " n'est pas portable même entre différentes versions du même OS. Une meilleure solution serait d'extraire les composantes date individuellement, et de choisir entre les opérateurs de formatage date spécifique et l'accès Date attribut pour chaque composante.
e = datetime.date(2014, 1, 6)
"{date:%A} {date.day} {date:%B}{date.year}".format(date=e)
%d
supporte à la fois (menant zéro et sans lui) en python 3.6.5 (et avec un peu de chance dans les versions suivantes)