Python 은 한 줄 의 코드 를 사용 하여 지난달 이 몇 월 이 었 는 지 가 져 옵 니 다.

본 고 에서 소개 한 Python 시간 날짜 처리,날짜 시간 처 리 는 실제 응용 장면 에서 없 는 곳 이 없 기 때문에 이것 은 프로 그래 밍 언어 에서 없어 서 는 안 될 모듈 이 되 었 고 Python 도 예외 가 아니다.그런데 Python 에 관련 모듈 이 몇 개 있 는 지 아 세 요?datetime,time,calendar,dateutil,pytz 등.너 는 몇 가지 데이터 형식 이 있 는 지 아니?date,time,datetime,tzinfo,timedelta 등등.
어느 날 저 는 이런 수 요 를 만 났 습 니 다.현재 달의 전 월 이 몇 월 인지 얻 으 려 고 합 니 다.이 달 이 2018 년 1 월 이 라 고 가정 하면 지난달 은 2017 년 12 월 입 니 다.이런 몇 가지 절 차 를 거 쳐 야 합 니 다.

>>> import datetime
 # 1.   「  」
 >>> today = datetime.date.today()
 # 2.          
 >>> first = today.replace(day=1)
 # 3.    ,          
 >>> last_month = first - datetime.timedelta(days=1)
 # 4.         
 >>> print(last_month.strftime("%Y%m"))
 201807
 >>>
이것 은 얼마나 번 거 로 운 가?이것 이 Python 코드 라 고 의심 할 정도 로 귀 찮 습 니까?datetime.replace 방법 으로 month-1 을 만 들 었 으 면 좋 겠 다 고 말 할 수 있 습 니 다.어떻게 보면 괜 찮 을 것 같 습 니 다.실제로 bug 가 있 습 니 다.month 의 범 위 는 1-12 밖 에 안 됩 니 다.

>>> d.replace(month=d.month-1)
datetime.datetime(2018, 7, 24, 11, 29, 28, 929830)
month-11     
>>> d.replace(month=d.month-11)
ValueError: month must be in 1..12
날짜 시간,시간 스탬프,문자열 간 의 상호 전환 API 방법 도 아 십 니까?시간 과 관련 된 작업 을 처리 할 때마다 공식 문 서 를 한 번 뒤 져 봐 야 손 을 쓸 수 있 는 것 이 아 닙 니까?time 모듈 과 datetime 모듈 의 다양한 유형 간 의 상호 전환 을 볼 수 있 습 니 다.이 화살표 들 이 밀집 공포 증 이 있 는 지 볼 수 있 습 니 다.

어쨌든 이 모듈 과 API 작업 에 익숙해 져 야 합 니 다.기억 하지 못 해도 괜 찮 습 니 다.적어도 몇 번 은 수 동 으로 두 드 려 야 합 니 다.다음 에 만 날 때 문 서 를 뒤 져 보면 어떤 방법 이 무엇 을 하 는 지,어떻게 사용 하 는 지 신속하게 찾 을 수 있 습 니 다.
하지만 오늘 은 앤 리 가 너 에 게 준 이 시간 날짜 라 이브 러 리:Arrow.그것 의 영감 은 requests 라 이브 러 리 에서 나온다.모든 번잡 한 것 을 뒤에 숨 기 고 당신 에 게 남 겨 준 것 은 for humans 인터페이스 입 니 다.keep it simple and stupid 라 는 말의 의 미 를 충분히 해석 했다.
이 글 은 Arrow 의 사용 방식 을 초보 적 으로 이해 하고 파악 할 수 있 도록 해 준다.
설치 하 다.

$ pip install arrow
쓰다

>>> a = arrow.now() #       
>>> a
<Arrow [2018-08-24T07:09:03.468562+08:00]>
>>> arrow.utcnow() #   utc  
<Arrow [2018-08-23T23:11:50.147585+00:00]>
Arrow 대상 은 증강 판 datetime 대상 이 라 고 생각 할 수 있 습 니 다.
Arrow 대상 을 통 해 datetime 대상 을 가 져 올 수 있 습 니 다.

>>> t = a.datetime
>>> type(t)
<class 'datetime.datetime'>
>>> t
datetime.datetime(2018, 8, 24, 7, 17, 14, 884750, tzinfo=tzlocal())
Arrow 대상 을 통 해 타임 스탬프 를 받 을 수 있 습 니 다.

>>> a.timestamp
1535066234
arrow 대상 의 년,월,일,시,분,초 가 져 오기

>>> a.year
2018
>>> a.month
8
>>> a.day
24
>>> a.hour
7
arrow 대상 의 시간 과 날짜 가 져 오기

>>> a.date()
datetime.date(2018, 8, 24)
>>> a.time()
datetime.time(7, 9, 3, 468562)
시간 과 날 짜 를 가 져 오 는 것 은 방법 이 며,datetime 과 timestamp 를 가 져 오 는 것 은 두 가지 속성 입 니 다.
다음은 arrow 의 재 미 있 는 방법 을 소개 하 겠 습 니 다.
shift
shift 는 약간 커서 캘리퍼스 와 같 아서 좌우 양쪽 에서 가감 시 위 를 조작 할 수 있 습 니 다.가감 대상 은 년 월 일 시 분 초 와 주 일 수 있 습 니 다.다시 글 의 시작 부분 으로 돌아 가 현재 달의 한 달 전 을 얻 으 려 면 이렇게 쓸 수 있 습 니 다.

>>> a.shift(months=-1)
<Arrow [2018-07-24T07:09:03.468562+08:00]>
>>> a.shift(months=-1).format("YYYYMM")
'201807'
>>>
매개 변수 months=-1 을 지정 하면 됩 니 다.앞으로 한 달 이면 month=+1,플러스 는 생략 할 수 있 습 니 다.이렇게 하면 arrow 시간 대상 을 바탕 으로 임의로 앞으로 늘 리 거나 뒤로 줄 일 수 있 습 니 다.month 뒤에 s,year 가 있 습 니 다.다음은 몇 가지 예 이다.
한 달 을 늘리다

>>> a.shift(months=1)
<Arrow [2018-09-24T07:09:03.468562+08:00]>
한 달 을 감 하 다

>>> a.shift(months=-1)
<Arrow [2018-07-24T07:09:03.468562+08:00]>
2 년 감소 하 다

>>> a.shift(years=-2)
<Arrow [2016-08-24T07:09:03.468562+08:00]>
>>>
한 시간 추가

>>> a.shift(hours=1)
<Arrow [2018-08-24T08:09:03.468562+08:00]>
주 별로 가감 도 할 수 있어 요.

>>> a.shift(weeks=1)
<Arrow [2018-08-31T07:09:03.468562+08:00]>
어느 해 나 어느 달 로 수정 할 지 명확 하 게 지정 하려 면 replace 방법 을 사용 하면 됩 니 다.repalce 는 datetime 대상 에서 도 이 방법 이 있 습 니 다.이들 의 사용 방식 은 같 습 니 다.
humanize
humanize 방법 은 현재 시각 에 비해'얼마 전'을 표시 하 는 읽 을 수 있 는 문자열 형식 입 니 다.기본 값 은 영어 형식 입 니 다.locale 을 지정 하면 해당 하 는 언어 형식 을 표시 할 수 있 습 니 다.

>>> a.humanize()
'6 hours ago'
>>> a.humanize(locale='zh')
'6   '
format
format 는 포맷 도구 입 니 다.지정 한 형식 에 따라 arrow 대상 을 문자열 형식 으로 변환 할 수 있 습 니 다.형식 Token 은 아래 그림 을 참고 하 십시오.

>>> a.format()
'2018-08-24 07:09:03+08:00'
>>> a.format("YYYY-MM-DD HH:mm:ss")
'2018-08-24 07:09:03'

to
to 로 컬 시간 대 를 다른 임의의 시간 대 로 변환 할 수 있 습 니 다.예 를 들 어:

>>> arrow.now()
<Arrow [2018-08-24T16:58:50.990657+08:00]>
>>> arrow.now().to("utc")
<Arrow [2018-08-24T08:59:04.316289+00:00]>
>>> arrow.now().to("utc").to("local")
<Arrow [2018-08-24T16:59:15.800847+08:00]>
>>> arrow.now().to("America/New_York")
<Arrow [2018-08-24T04:59:34.037182-04:00]>
Arrow 개체 구축
arrow 를 datetime,str,date,time,timestamp 로 변환 할 수 있 는 방법 을 소개 했다.Arrow 대상 을 어떻게 구축 할 것 인가?now(),utcnow()방법 을 사용 한 후 get 공장 방법 을 사용 하거나 Arrow 구조 방법 으로 연월 일 시 분 초 를 직접 지정 할 수 있 습 니 다.

>>> arrow.Arrow(2018, 8, 24, 12, 30, 45)
<Arrow [2018-08-24T12:30:45+00:00]>
>>> arrow.Arrow(2018, 8, 24, 12, 30, 45, tzinfo='utc')
<Arrow [2018-08-24T12:30:45+00:00]>
>>> arrow.Arrow(2018, 8, 24, 12, 30, 45, tzinfo='local')
<Arrow [2018-08-24T12:30:45+08:00]>
get
두 번 째 방식 은 get 방법 으로 arrow 대상 을 만 드 는 것 입 니 다.get 방법 은 매우 유연 합 니 다.예 를 직접 보고 따라 두 드 리 는 것 입 니 다.

#     ,    utcnow()
>>> arrow.get()
<Arrow [2018-08-24T07:11:50.528742+00:00]>
#        
>>> arrow.get(1535113845)
#     datetime  
>>> arrow.get(datetime(2018,8,24))
<Arrow [2018-08-24T00:00:00+00:00]>
#     date  
>>> from datetime import date
>>> arrow.get(date(2018,7,24))
<Arrow [2018-07-24T00:00:00+00:00]>
#           
>>> arrow.get("2018-08-11 12:30:56")
<Arrow [2018-08-11T12:30:56+00:00]>
#        ,     
>>> arrow.get("18-08-11 12:30:56", "YY-MM-DD HH:mm:ss")
<Arrow [2018-08-11T12:30:56+00:00]>
Arrow 의 부족 함
get 방법 에 대해 강력 해 보이 고 사용 하기에 유연 하 며 모든 매개 변 수 를 받 아들 일 수 있 을 것 같 지만 문제 도 가 져 왔 습 니 다.심지어 bug 도 가 져 왔 습 니 다.예 를 들 면

>>> arrow.get("2018-7-11")
<Arrow [2018-01-01T00:00:00+00:00]>
원 하 는 값 은 2018-07-11 이 어야 합 니 다.그러나 오 류 를 제시 하지 않 았 습 니 다.정확 한 방법 은 형식 을 지정 하 는 것 입 니 다.문자열 은 표준 날짜 형식 이 아니 기 때 문 입 니 다.

>>> arrow.get("2018-7-11", "YYYY-M-DD")
<Arrow [2018-07-11T00:00:00+00:00]>
한 가지 방법 을 통 해 n 가지 상황 을 호 환 하 는 것 은 매우 어렵 고 내부 실현 도 매우 복잡 하 며 사용자 로 서 사용 하기에 도 혼 란 스 러 울 것 이다.
총결산
위 에서 말 한 것 은 소 편 이 소개 한 Python 이 한 줄 의 코드 를 사용 하여 지난달 이 몇 월 이 었 는 지 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기