IT

제로패딩이 없는 Python 데이트 타임 포맷

itgroup 2023. 10. 20. 13:34
반응형

제로패딩이 없는 Python 데이트 타임 포맷

날짜와 시간에 제로 패딩을 사용하지 않는 Python 날짜 시간 인쇄 형식이 있습니까?

지금 사용하는 형식:

mydatetime.strftime('%m/%d/%Y %I:%M%p')

결과 : 02/29/2012 오후 05:03
희망 : 2/29/2012 오후 5:03

월을 '02'가 아닌 '2'로 표시하고 시간을 '5:03'으로 표시하는 형식은 무엇입니까?05:03 대신 PMPM'

위의 "all or none" 선행 0 측면을 피하기 위한 다른 대안은 필드 유형 앞에 마이너스를 두는 것입니다.

mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

그러면 '4/10/2015 03:00AM'

다음이 됨: '4/10/2015 3:00AM'

원하는 경우 선택적으로 요일 앞에 마이너스를 넣을 수 있습니다.

편집: 마이너스 기능은 "Glibc notes" 아래의 리눅스 strtime manpage에서 언급된 GNU C 라이브러리("glibc")에서 유래합니다.

새로운 문자열 포맷 시스템은 다음과 같은 대안을 제공합니다.strftime. 꽤 읽을 만하다고요 -- 사실은, 그것이 더 바람직할 수도 있습니다.strftime그 점 때문가 제로가 아닌도 없습니다.패드가 제로 패드가 아니라는 사실은 말할 것도 없습니다.

>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'

미닛 필드에 패딩이 없어야 하므로 다음과 같은 작업을 수행할 수 있습니다.

>>> '{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가 지적했듯이,strftime1900년 이전 날짜에 대해 일부(모두?) 플랫폼에서 장애가 발생합니다.

에서 사용할 수 있는 형식 지정 옵션datetime.strftime()모두 제로 패드입니다.물론 자신의 포맷 기능을 롤링할 수도 있지만, 이 경우 가장 쉬운 해결책은 결과를 사후 처리하는 것일 수 있습니다.datetime.strftime():

s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")

적절한 해결책이 아닌 승인된 답변(IMHO) 문서화된 적절한 방법:

리눅스에서 "#"은 "-"로 대체됩니다.

%-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에 따르면 다음과 같습니다.윈도우즈의 # 해시 트릭은 네이티브 파이썬 실행 파일에서만 사용할 수 있습니다.이것은 cygwin 기반 python 구현에서는 작동하지 않습니다.

리눅스에 관한 Chris Freeman의 좋은 답변.

On windows, it's:

mydate.strftime('%#m/%#d/%Y')

Thought that might help.

In the official docs formating section:

  1. When used with the strptime() method, the leading zero is optional for formats %d, %m, %H, %I, %M, %S, %J, %U, %W, and %V. Format %y does require a leading zero.

그래서 사용.%d일을 숫자로 파싱하면 자동으로 둘 다 파싱됩니다.07&7예를들면.

다른 여러 사람들이 언급한 것처럼, 윈도우에서 선행 0을 무시하려면 다음을 사용해야 합니다.%#d대신에%-d.

비즈니스 로직에서 플랫폼 스위치를 보지 않고 깨끗한 크로스 플랫폼 파이썬 코드를 작성하고자 하는 사람들을 위해 다음과 같은 정보를 제공합니다.Python3Windows, Linux 및 기타(테스트된 Linux, Windows 및 FreeB) 모두에 대해 하나의 형식 문자열을 가질 수 있도록 지원하는 helperSD):

import os
from datetime import datetime

def dateToStr(d: datetime, fmt: str) -> str:
    return d.strftime(fmt.replace('%-', '%#') if os.name == 'nt' else fmt)

dateToStr(datetime.now(), '%-m/%-d/%-Y')

참고로, 이것은 또 다른 것입니다.Whaaaaaaaat?Python 의 기능입니다.왜 그들이 모든 플랫폼에 대해 표준 포맷 세트를 만들지 않았고 네이티브 플랫폼 기능을 사용하기 위해 선택적인 'use_native' 플래그를 추가하지 않았는지 이해할 수 없습니다.레거시 지원을 위해 반드시 지켜야 할 초기 설계 결정이었다고 생각합니다.

"%l" (that's a lower-case L) works for the hour (instead of "%I"). I only know this from another answer here

Python strftime - date without leading 0?

but unfortunately they don't have the code for the other elements of a date/time.

I use this:

D = str(datetime.now().day)
MM = str(datetime.now().month)
YYYY = str(datetime.now().year)

This, today, will return: 2, 12, 2021

ReferenceURL : https://stackoverflow.com/questions/9525944/python-datetime-formatting-without-zero-padding

반응형