Czy istnieje format drukowania dat w języku Python, który nie będzie używał uzupełniania zerami w datach i godzinach?
Format, którego teraz używam:
mydatetime.strftime('%m/%d/%Y %I:%M%p')
Wynik: 2012-02-29, 17:03
Oczekiwany: 2012-02-29, 17:03
Jaki format przedstawiałby miesiąc jako „2” zamiast „02”, a czas jako „17:03” zamiast „05: 15”
python
datetime
formatting
zero-pad
Yarin
źródło
źródło
.lstrip("0")
pozbycie się wiodącego zera.Innym rozwiązaniem pozwalającym uniknąć powyższego aspektu wiodącego zera „wszystko albo nic” jest umieszczenie minusa przed typem pola:
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
Następnie: „4/10/2015 03:00 AM”
Staje się: „4/10/2015 3:00 AM”
Jeśli chcesz, możesz opcjonalnie umieścić minus przed dniem.
Edycja: funkcja minus pochodzi z biblioteki GNU C („glibc”), jak wspomniano na stronie podręcznika Linux strftime w sekcji „Notatki Glibc”
źródło
date.__format__
lubtime.strftime
, docs.python.org/3/library/... i docs.python.org/3.8/library/time.html#time.strftime odpowiednioNowy system formatowania ciągów stanowi alternatywę dla
strftime
. Jest całkiem czytelny - rzeczywiście, może być lepszy niżstrftime
na tym koncie. Nie wspominając o tym, że nie jest to zero-pad:>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now()) '3/1/2012'
Ponieważ prawdopodobnie potrzebujesz dopełnienia zerowego w polu minut, możesz to zrobić:
>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now) '3/1/2012 20:00'
Jeśli chcesz mieć „zwykły” czas zamiast „wojskowego”, możesz nadal używać standardowych
strftime
specyfikatorów. Wygodnie, dla naszych celów,strftime
nie dostarcza kod do 12-godzinnego czasu napawa się zaślepką zamiast zerem:'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now) '4/4/2014 6:00PM'
Niestety, staje się to nieco mniej czytelne. Jak wskazuje @mlissner,
strftime
na niektórych (wszystkich?) Platformach zakończy się niepowodzeniem w przypadku dat sprzed 1900 r.źródło
"{0.day} {0:%B %Y}".format(d)
co da ci'2 August 2013'
jako dzień tego komentarza :)Zaakceptowana odpowiedź nie jest właściwym rozwiązaniem (IMHO) Właściwe udokumentowane metody:
W Linuksie „#” jest zastępowane przez „-”:
% -d,% -H,% -I,% -j,% -m,% -M,% -S,% -U,% -w,% -W,% -y,% -Y
W systemie Windows „-” jest zastępowane przez „#”:
% # d,% # H,% # I,% # j,% # m,% # M,% # S,% # U,% # w,% # W,% # y,% # Y
#Linux mydatetime.strftime('%-m/%d/%Y %-I:%M%p') # Windows mydatetime.strftime('%#m/%d/%Y %#I:%M%p')
Źródło: https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
Jak stwierdził Sagneta: sztuczka # hash w systemie Windows jest dostępna tylko dla natywnego pliku wykonywalnego Pythona. to nie zadziała w przypadku implementacji Pythona opartych na cygwin.
źródło
Dobra odpowiedź od Chrisa Freemana w systemie Linux.
W systemie Windows jest to:
mydate.strftime('%#m/%#d/%Y')
Pomyślałem, że to może pomóc.
źródło
„% l” (mała litera L) oznacza godzinę (zamiast „% I”). Wiem to tylko z innej odpowiedzi tutaj
Python strftime - data bez początkowego 0?
ale niestety nie mają kodu dla innych elementów daty / czasu.
źródło