Python strftime-date sans mener 0?

en utilisant Python strftime , y a-t-il un moyen de supprimer le premier 0 de la date si elle est avant le 10, c'est à dire. donc 01 est 1 ? Tu ne trouves pas un truc % pour ça?

Merci!

188
demandé sur bluish 2009-05-25 04:11:49

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 .

431
répondu Ryan 2017-04-08 07:42:19

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'
165
répondu mgilson 2016-08-29 16:08:31

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'
34
répondu Alex Martelli 2009-05-25 00:22:43
>>> import datetime
>>> d = datetime.datetime.now()
>>> d.strftime('X%d/X%m/%Y').replace('X0','X').replace('X','')
'5/5/2011'
26
répondu gdw2 2011-05-05 15:46:24

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.

18
répondu newacct 2009-05-25 18:13:36

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:)

13
répondu bonbon.langes 2014-11-25 11:08:03

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

11
répondu Chad Kennedy 2015-07-31 14:12:53

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')    
9
répondu mcqwerty 2009-09-15 16:31:23

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)
4
répondu ptronico 2012-04-03 09:09:22

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() .

2
répondu Nathan Viboonchan 2012-04-03 09:13:04

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").

2
répondu mmitchell 2014-11-17 18:19:31

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 .

1
répondu Brandon Rhodes 2012-04-03 09:12:24

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é

1
répondu OliverRadini 2016-07-29 15:29:35

utilisez simplement replace comme ceci:

(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")

il sortira:

'2017/7/21'
1
répondu Mohammad Hossein Shojaeinia 2017-07-21 18:16:44
import datetime
now = datetime.datetime.now()
print now.strftime("%b %_d")
0
répondu user7503128 2017-02-01 22:56:30

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)
0
répondu Chris Chewa 2018-04-19 06:52:40

%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)

enter image description here

0
répondu Kshitij 2018-08-19 08:08:02