2015-03-06 3 views
13

Sur SO question 904928 (Python strftime - date without leading 0?) Ryan a répondu:Pourquoi "% -d" ou "% -e" supprime-t-il l'espace initial ou zéro?

Actually I had the same problem and I realised that, if you add a hyphen between the % and the letter, you can remove the leading zero.

For example %Y/%-m/%-d.

J'ai fait face au même problème et qui était une excellente solution, mais, pourquoi ce comme cela se comporte?

>>> import datetime 
>>> datetime.datetime(2015, 3, 5).strftime('%d') 
'05' 

>>> datetime.datetime(2015, 3, 5).strftime('%-d') 
'5' 

# It also works with a leading space 
>>> datetime.datetime(2015, 3, 5).strftime('%e') 
' 5' 

>>> datetime.datetime(2015, 3, 5).strftime('%-e') 
'5' 

# Of course other numbers doesn't get stripped 
>>> datetime.datetime(2015, 3, 15).strftime('%-e') 
'15' 

Je ne trouve aucune documentation à ce sujet? ->python datetime docs/python string operations

Il semble que cela ne fonctionne pas sur les machines Windows, eh bien je n'utilise pas de fenêtres mais il serait intéressant de savoir pourquoi cela ne fonctionne pas?

+1

Sur mes versions Windows que votre premier exemple fonctionne sans erreur. Le reste aboutit à une chaîne de valeurs ValueError: Invalid. [Cette question] (http://stackoverflow.com/questions/10807164/python-time-formatting-different-in-windows) peut vous éclairer sur les directives standard/portables par rapport aux "améliorations" spécifiques à la plate-forme. – jedwards

+0

Cela dépend donc de l'implémentation de libc de chaque système d'exploitation. Je vous remercie! Des conseils sur comment/pourquoi ces exemples fonctionnent généralement sur les systèmes Unix? – Mathias

Répondre

16

Python datetime.strftime() delegates to C strftime() function that is platform-dependent:

The full set of format codes supported varies across platforms, because Python calls the platform C library’s strftime() function, and platform variations are common. To see the full set of format codes supported on your platform, consult the strftime(3) documentation.

Glibc notes for strftime(3):

- (dash) Do not pad a numeric result string.

Le résultat sur ma machine Ubuntu:

>>> from datetime import datetime 
>>> datetime.now().strftime('%d') 
'07' 
>>> datetime.now().strftime('%-d') 
'7'