Podczas używania Pythona strftime
istnieje sposób na usunięcie pierwszego 0 daty, jeśli jest ona wcześniejsza niż 10, tj. tak 01
jest 1
? Nie możesz znaleźć %
czegoś takiego?
Dzięki!
Właściwie miałem ten sam problem i zdałem sobie sprawę, że jeśli dodasz łącznik między %
literą a literą, możesz usunąć wiodące zero.
Na przykład %Y/%-m/%-d
.
Działa to tylko w systemach Unix (Linux, OS X), a nie Windows (w tym Cygwin). W systemie Windows użyłbyś #
np %Y/%#m/%#d
.
ValueError: '-' is a bad directive in format '%b %-d, %Y'
. OSX, Python 2.7.%#d
zrobiłby to samo na WindowsieMożemy to zrobić dzięki pojawieniu się tej
format
metody od python2.6:Chociaż być może poza zakresem oryginalnego pytania, w celu uzyskania bardziej interesujących formatów możesz robić rzeczy takie jak:
Od wersji Python3.6 można to wyrazić jako ciąg sformatowany w wierszu :
źródło
time.strftime('%A %B %d, %Y')
, która daje (teraz w języku angielskim)Tuesday October 07, 2014
.__format__
haczyk, który pozwala pisać takie rzeczy.'{dt.hour}'
używa zegara 24-godzinnego :(. Użycie drugiej opcji wciąż powoduje powrót do korzystania'{%#I}'
z systemu Windows i'{%-I}'
Uniksa.Niektóre platformy mogą obsługiwać specyfikację szerokości i precyzji między
%
literą a literą (np. „D” na dzień miesiąca), zgodnie z http://docs.python.org/library/time.html - ale zdecydowanie nie jest przenośny rozwiązanie (np. nie działa na moim komputerze Mac ;-). Może możesz użyć zamiany ciągu (lub RE, dla naprawdę paskudnego formatu) po tym,strftime
aby temu zaradzić? na przykład:źródło
Oto dokumentacja modyfikatorów obsługiwanych przez
strftime()
bibliotekę GNU C. (Jak ludzie mówili wcześniej, może nie być przenośny). Interesujące może być:%e
zamiast%d
zastąpi wiodące zero w dniu miesiąca spacjąDziała na moim Pythonie (w systemie Linux). Nie wiem, czy to zadziała na twoim.
źródło
%-d
powyżej , działa to w OS X 10.8.5 z Python 2.7.2, ale nie w Windows 7 Pro 64-bit z Python 2.7.3.źródło
.replace('X0','X').replace('X','')
? Po prostu zrób.replace('X0', '')
i będzie dobrze.W systemie Windows dodaj „#”, jak w „% # m /% # d /% Y% # I:% M:% S% p”
W celach informacyjnych: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
źródło
dość późno na imprezę, ale
%-d
działa na moim końcu.datetime.now().strftime('%B %-d, %Y')
produkuje coś w stylu „5 listopada 2014 r.”Twoje zdrowie :)
źródło
ValueError: Invalid format string
w moim systemie Windows.Uważam, że filtr formatowania daty szablonu Django jest szybki i łatwy. Usuwa początkowe zera. Jeśli nie masz nic przeciwko importowaniu modułu Django, sprawdź to.
http://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
źródło
import django.conf
django.conf.settings.configure()
Spójrz na
-
poniższe:źródło
po prostu użyj
replace
tego:(datetime.date.now()).strftime("%Y/%m/%d").replace("/0", "/")
wyświetli:
źródło
Aby
%d
przekonwertować na liczbę całkowitą za pomocą,int()
wówczas automatycznie usunie początkowe 0 i stanie się liczbą całkowitą. Następnie możesz przekonwertować z powrotem na ciąg za pomocąstr()
.źródło
użycie na przykład „% -d” nie jest przenośne nawet między różnymi wersjami tego samego systemu operacyjnego. Lepszym rozwiązaniem byłoby wyodrębnienie komponentów daty indywidualnie i wybranie pomiędzy operatorami formatowania specyficznymi dla daty a dostępem do atrybutu daty dla każdego komponentu.
źródło
Ponieważ Python tak naprawdę wywołuje funkcję języka C
strftime(3)
na twojej platformie, być może istnieją znaki formatu, których możesz użyć do kontrolowania wiodącego zera; próbowaćman strftime
spojrzeć. Ale oczywiście wynik nie będzie przenośny, jak przypomni Ci instrukcja Python. :-)Chciałbym spróbować użyć nowego stylu
datetime
obiekt zamiast, który posiada atrybuty, jakt.year
it.month
it.day
i włożył ci poprzez normalne, high-powered formatowania z%
operatorem, który obejmuje kontrolą pomocy wiodących zer. Szczegółowe informacje można znaleźć na stronie http://docs.python.org/library/datetime.html . Jeszcze lepiej, użyj"".format()
operatora, jeśli Twój Python go ma i jest jeszcze bardziej nowoczesny; ma również wiele opcji formatowania liczb. Zobacz: http://docs.python.org/library/string.html#string-formatting .źródło
W oparciu o metodę Alexa będzie to działać zarówno w przypadku ciągów początkowych, jak i późniejszych:
Podoba mi się to lepiej niż .format lub% -d, ponieważ jest to platforma wieloplatformowa i pozwala mi nadal używać strftime (aby uzyskać takie rzeczy jak „listopad” i „poniedziałek”).
źródło
Stare pytanie, ale% l (małe litery L) działało dla mnie w strftime: może to nie działać dla wszystkich, ponieważ nie jest wymienione w dokumentacji Pythona, którą znalazłem
źródło
źródło
ValueError: '_' is a bad directive in format '%a %b %_d %H:%M:%S %Y'
using python 3.5