[python]날짜 연산하기, 월말일자 구하기

2020. 11. 24. 13:23·Programming/Python
반응형

별로 안쓸 줄 알았던 날짜 연산 코드가 프로젝트에 가면 심심찮게 많이 사용된다. 

그리고 하나의 객체에 대한 날짜 연산 프로그램도 있지만, Series 날짜의 연산도 아주 많이 사용된다. 

 

이번 포스팅에서는 우선 하나의 객체에 대한 날짜 연산 모듈에 대해 알아본다. 그리고 자주 사용하는 월말일자 구하는 모듈도 알아본다. 

 

1. datetime class

datetime 모듈은 가장 많이 사용하는 날짜 연산 모듈이다. 

datetime 모듈 안에는 datetime 이라는 같은 클래스가 또 존재한다. 같은 이름의 모듈과 패키지로 헷갈릴 수 있는데, 코드를 최소한으로 줄이기 위해서, 그리고 메모리위에 클래스를 적게 불러오기 위해 datetime class 단위로 불러오도록 한다.

1.1. datetime 모듈로 현재 날짜와 시간 구하기

현재 날짜와 현재 시간을 구할 때에는 다음과 같이 today mathod를 사용한다. 

>>> from datetime import datetime, timedelta

>>> datetime.today()
datetime.datetime(2020, 11, 24, 10, 58, 38, 143138)

1.2. 특정 날짜와 시간으로 객체 만들기

우리가 특정한 날짜와 시간을 지정할 수도 있다. 

다음과 같이 지정하면 datetime 타입의 객체가 생성된다.

## 일자까지만 지정할 경우
>>> date = datetime(2020, 11, 20)
>>> date ## 시. 분, 초는 0으로 지정됨
datetime.datetime(2020, 11, 20, 0, 0)

## 시간까지 지정할 경우
>>> time = datetime(2020, 11, 20, 10, 10, 10)
>>> time ## 시, 분, 초까지 나옴 
datetime.datetime(2020, 11, 20, 10, 10, 10)

※ datetime 객체를 print 하게 될 경우 다음과 같이 출력된다. 

>>> print(time)
2020-11-20 10:10:10

1.3. 문자열로 날짜/시간 객체 만들기

보통은 날짜를 문지열 타입으로 지정하는 경우가 많기 때문에 datetime.strptime을 사용해서 날짜 객체로 사용해야 연산을 할 수 있다. 

>>> d = datetime.strptime('2020-11-20', '%Y-%m-%d')
>>> d
datetime.datetime(2020, 11, 20, 0, 0)

이 때, %Y는 년, %m는 월, %d는 일을 뜻한다.(대소문자 구분 필수)

 

1.4. 날짜 객체를 문자열로 만들기

반대로 datetime.strftime을 사용해서 날짜 객체를 문자열로 만들 수 있다. 

>>> datetime.strftime(d, '%Y-%m-%d')
'2020-11-20'

>>> datetime.strftime(d, '%Y%m%d')
'20201120'

>>> datetime.strftime(d, '%Y%m%d %H:%M:%S') ## 시간까지 출력
'20201120 00:00:00'

 

2. timedelta class

timedelta class는 두 날짜와 시간의 차이를 계산할 때 자주 사용한다. 

 

2.1. 날짜 차이 계산하기

2020년 11월 20일에서 10일 전의 날짜를 구해본다.

>>> d = datetime(2020, 11, 20)
>>> d - timedelta(days=10)
datetime.datetime(2020, 11, 10, 0, 0)

2.2. 시간 차이 계산하기

datetime 객체끼리 연산을 하면 timedelta 객체로 결과가 출력된다. 

>>> datetime(2020, 11, 13) - datetime(2020, 11, 1)
datetime.timedelta(days=12)

 

3. calendar

월초는 해당 월 + 01을 입력하면 되지만, 월말의 날짜는 월마다 다르기 때문에 통일시키기 어렵다. 

그래서 사용하는 두가지 방법이 있는데, 

 

하나는 다음 달 월초의 하루 전을 계산해서 넣는 방법이 있고 

하나는 calendar module을 사용하는 것이다. 

>>> datetime(2020, 12, 1) + timedelta(days = -1)
datetime.datetime(2020, 11, 30, 0, 0)
>>> import calendar

>>> calendar.monthrange(2020, 11)
(6, 30)

위처럼 calendar 패키지를 부르고, monthrange(year, month)를 입력하면, tuple 형태가 나온다.

첫번째 원소는 해당 년월의 1일의 요일을 말하고, 

두번째 원소는 해당 년월의 마지막 날짜를 말한다. 

그렇다면 2020년 11월 1일은 6번째 날 (일요일. 월요일을 0으로 시작)이고, 마지막 날짜는 30일이라는 뜻이다. 

 

※번외.

원래는 월말을 구하는 용으로 calendar를 사용해왔는데 찾다가 재미있는 걸 발견했다. 

calendar.calendar(year)를 입력하면 그 해의 달력을 전부 출력한다는 것. 

>>> print(calendar.calendar(2020))

                                  2020

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2                         1
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       2  3  4  5  6  7  8
13 14 15 16 17 18 19      10 11 12 13 14 15 16       9 10 11 12 13 14 15
20 21 22 23 24 25 26      17 18 19 20 21 22 23      16 17 18 19 20 21 22
27 28 29 30 31            24 25 26 27 28 29         23 24 25 26 27 28 29
                                                    30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                   1  2  3       1  2  3  4  5  6  7
 6  7  8  9 10 11 12       4  5  6  7  8  9 10       8  9 10 11 12 13 14
13 14 15 16 17 18 19      11 12 13 14 15 16 17      15 16 17 18 19 20 21
20 21 22 23 24 25 26      18 19 20 21 22 23 24      22 23 24 25 26 27 28
27 28 29 30               25 26 27 28 29 30 31      29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
       1  2  3  4  5                      1  2          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28 29 30      28 29 30
                          31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
          1  2  3  4                         1          1  2  3  4  5  6
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31
                          30

 

참고 사이트

 

파이썬 코딩 도장: 47.4 날짜/시간 모듈 활용하기

파이썬으로 프로그래밍을 하다보면 날짜와 시간 처리를 해야 하는 경우가 자주 생깁니다. 여기서는 날짜와 시간을 표현하는 time과 datetime 모듈을 소개하겠습니다. 47.4.1  time 모듈로 현재 시간

dojang.io

 

특정 월에 마지막 날짜를 구하려면?

파이썬 표준 library를 써서 특정 월에 며칠이나 있는지 알아내는 방법이 있나요? 표준 library이면 좋겠지만 그런 기능이 없으면 date랑 관련된 다른 패키지라도 괜찮습니다.

hashcode.co.kr

 

반응형

'Programming > Python' 카테고리의 다른 글

[Python] pytorch 모델 저장하기 - state_dict()  (0) 2021.01.06
[Python] isinstance 함수 - 파이썬 자료형 확인하는 함수  (0) 2021.01.06
[Python] enumerate 함수  (0) 2020.12.31
[Python] Colab이란? Colab 구글 드라이브에서 사용하기  (0) 2020.12.28
[python]Series, Dataframe에서 날짜 연산하기  (0) 2020.11.24
'Programming/Python' 카테고리의 다른 글
  • [Python] isinstance 함수 - 파이썬 자료형 확인하는 함수
  • [Python] enumerate 함수
  • [Python] Colab이란? Colab 구글 드라이브에서 사용하기
  • [python]Series, Dataframe에서 날짜 연산하기
자동화먹
자동화먹
많은 사람들에게 도움이 되는 생산적인 기록하기
    반응형
  • 자동화먹
    자동화먹의 생산적인 기록
    자동화먹
  • 전체
    오늘
    어제
    • 분류 전체보기 (144)
      • 생산성 & 자동화 툴 (30)
        • Notion (24)
        • Obsidian (0)
        • Make.com (1)
        • tips (5)
      • Programming (37)
        • Python (18)
        • Oracle (6)
        • Git (13)
      • AI Study (65)
        • DL_Basic (14)
        • ML_Basic (14)
        • NLP (21)
        • Marketing&Recommend (4)
        • chatGPT (0)
        • etc (12)
      • 주인장의 생각서랍 (10)
        • 생각정리 (4)
        • 독서기록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    nlp
    Google Cloud Platform
    seq2seq
    파이토치
    딥러닝
    notion
    gcp
    GPT
    데이터분석
    빅데이터분석
    ML
    git commit
    노션첫걸음
    pytorch
    Python
    Jupyter notebook
    python기초
    Github
    자연어처리
    cnn
    빅데이터
    머신러닝
    기초
    Transformer
    LSTM
    데이터베이스
    dl
    git
    파이토치로 시작하는 딥러닝 기초
    노션
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
자동화먹
[python]날짜 연산하기, 월말일자 구하기
상단으로

티스토리툴바