Python 은 한 줄 의 코드 를 사용 하여 지난달 이 몇 월 이 었 는 지 가 져 옵 니 다.
어느 날 저 는 이런 수 요 를 만 났 습 니 다.현재 달의 전 월 이 몇 월 인지 얻 으 려 고 합 니 다.이 달 이 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 '
formatformat 는 포맷 도구 입 니 다.지정 한 형식 에 따라 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 이 한 줄 의 코드 를 사용 하여 지난달 이 몇 월 이 었 는 지 여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.