2015-03-06 31 views
13

na SO pytanie 904928 (Python strftime - date without leading 0?) Ryan odpowiedział:Dlaczego "% -d" lub "% -e" usuwa początkową spację lub zero?

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.

I w obliczu tego samego problemu i to było doskonałe rozwiązanie, ale dlaczego to zachowują się w ten sposób?

>>> 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' 

Nie mogę znaleźć żadnej dokumentacji na ten temat? ->python datetime docs/python string operations

Wygląda na to, że to nie działa na komputerach z systemem Windows, nie używam okien, ale byłoby ciekawie wiedzieć, dlaczego to nie działa?

+1

Na moje okna zbudować tylko swój pierwszy przykład działa bezbłędnie. Reszta daje w wyniku 'ValueError: Invalid format string'. [To pytanie] (http://stackoverflow.com/questions/10807164/python-time-format-different-in-windows) może rzucić nieco światła na twoje, dotyczące dyrektyw standardowych/przenośnych w stosunku do specyficznych dla platformy "ulepszeń". – jedwards

+0

To zależy od implementacji libc każdego systemu operacyjnego. Dziękuję Ci! Jakieś wskazówki o tym, jak/dlaczego te przykłady działają ogólnie w systemach uniksowych? – Mathias

Odpowiedz

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.

Wynik na moim komputerze Ubuntu:

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