날짜와 시간에 제로 패딩을 사용하지 않는 Python 날짜 시간을 인쇄하는 형식이 있습니까?
지금 사용중인 형식 :
mydatetime.strftime('%m/%d/%Y %I:%M%p')
결과 : 2012 년 2 월 29 일 오후 5시 03 분
희망 : 2012 년 2 월 29 일 오후 5시 3 분
월을 '02'대신 '2'로, 시간을 '05 : 03PM '대신'5:03 PM '으로 나타내는 형식은 무엇입니까?
답변:
에서 사용할 수있는 서식 옵션 datetime.strftime()
은 모두 제로 패드입니다. 물론 자신의 서식 지정 기능을 롤링 할 수 있지만이 경우 가장 쉬운 해결책은 다음 결과를 후 처리하는 것입니다 datetime.strftime()
.
s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")
.lstrip("0")
선행 0을 제거하는 이유 입니다.
위의 "전부 또는 없음"선행 0 측면을 방지하는 다른 방법은 필드 유형 앞에 마이너스를 배치하는 것입니다.
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')
다음은 '2015 년 4 월 10 일 03:00 AM'
변경 : '4/10/2015 3:00 AM'
원하는 경우 선택적으로 하루 앞에 마이너스를 배치 할 수 있습니다.
편집 : 빼기 기능은 "Glibc 노트"아래 의 Linux strftime 맨 페이지 에 언급 된 GNU C 라이브러리 ( "glibc")에서 파생됩니다.
date.__format__
나 time.strftime
, docs.python.org/3/library/...을 하고 docs.python.org/3.8/library/time.html#time.strftime 각각
새로운 문자열 형식화 시스템은 strftime
. 꽤 가독성이 좋으며 실제로 strftime
그 계정 보다 더 나을 수 있습니다 . 제로 패드가 아니라는 사실은 말할 것도 없습니다.
>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'
분 필드에 0 채우기를 원할 것이므로 다음과 같이 할 수 있습니다.
>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
'3/1/2012 20:00'
"군사"시간 대신 "정규"시간을 원하는 경우에도 표준 strftime
지정자를 사용할 수 있습니다. 편리하게, 우리의 목적을 위해 strftime
수행 하는 대신 0을 선두의 빈과 함께 12 시간의 시간 패딩에 대한 코드를 제공합니다 :
'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014 6:00PM'
아아, 이것은 다소 가독성이 떨어집니다. 그리고 @mlissner가 지적했듯이 strftime
1900 년 이전 날짜의 일부 (모든?) 플랫폼에서 실패합니다.
"{0.day} {0:%B %Y}".format(d)
제공 '2 August 2013'
됩니다. :)
적절한 해결책이 아닌 수락 된 답변 (IMHO) 적절한 문서화 된 방법 :
Linux에서 "#"은 "-"로 대체됩니다.
% -d, % -H, % -I, % -j, % -m, % -M, % -S, % -U, % -w, % -W, % -y, % -Y
Windows에서 "-"는 "#"로 대체됩니다.
% # 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')
출처 : https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx
Sagneta가 언급 한대로 : Windows의 # 해시 트릭은 네이티브 Python 실행 파일에서만 사용할 수 있습니다. 이것은 cygwin 기반 파이썬 구현에서는 작동하지 않습니다.
Linux에서 Chris Freeman의 좋은 답변입니다.
Windows에서는 다음과 같습니다.
mydate.strftime('%#m/%#d/%Y')
도움이 될 거라고 생각했습니다.
"% l"(소문자 L)은 시간 동안 ( "% I"대신) 작동합니다. 나는 여기 다른 대답에서만 이것을 알고 있습니다.
그러나 불행히도 날짜 / 시간의 다른 요소에 대한 코드가 없습니다.