일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- PostgreSQL
- Tkinter
- Mac
- c#
- matplotlib
- django
- math
- hive
- Excel
- google apps script
- Kotlin
- Github
- Java
- PySpark
- list
- Google Spreadsheet
- gas
- SQL
- GIT
- Python
- array
- numpy
- string
- Redshift
- 파이썬
- Apache
- Google Excel
- dataframe
- PANDAS
- Today
- Total
달나라 노트
Python datetime : strftime(시간 날짜 데이터를 텍스트로) & strptime(텍스트를 시간 날짜 데이터로) 본문
Python datetime : strftime(시간 날짜 데이터를 텍스트로) & strptime(텍스트를 시간 날짜 데이터로)
CosmosProject 2020. 12. 23. 02:54
2020-03-08이라는 날짜를 표현하는 방식은 다양합니다.
2020-03-08이라고 표현할 수도 있으며 2020/03/08, 03/08/2020, 03-08-2020, 08-03-2020 등등 여러 구분기호(-, / etc)와 년, 월, 일의 순서를 변경할 수도 있습니다.
이번 section에서는 이와 같이 날짜, 시간 데이터를 원하는 format에 맞춰 텍스트로 전환하는 방법을 알아보겠습니다.
import datetime
now = datetime.datetime.now()
print(now)
t0 = now.strftime("&H:%M:%S")
print(t0)
t1 = now.strftime("&H-%M-%S")
print(t1)
t2 = now.strftime("%m/%d/%Y, %H:%M:%S")
print(t2)
t3 = now.strftime("%d-%m-%Y %H:%M:%S")
print(t3)
t4 = now.strftime("%Y-%m-%d %H:%M:%S")
print(t4)
t5 = now.strftime("%y-%m-%d %H:%M:%S")
print(t4)
- Result
2020-03-10 01:13:28.843620
01:13:28
03/10/2020, 01:13:28
10-03-2020 01:13:28
2020-03-10 01:13:28
20-03-10 01:13:28
now 함수에 의해 now라는 변수에 현재 시간이 microseconds까지 입력됩니다.
t0은 now함수에 입력된 2020-03-10 01:13:28.843620 중에서 시간, 분, 초 데이터만 뽑아 구분기호를 colon(:)으로 하여 나타냅니다
t1은 t0처럼 시간, 분, 초 데이터만을 뽑으며 구분기호는 hypen(-)으로 합니다.
t2는 now에 입력된 2020-03-10 01:13:28.843620라는 시간 중 월, 일, 년, 시, 분, 초 데이터만 주어진대로 formatting 해줍니다.
t3, t4도 t2와 동일하나 년, 월, 일의 순서 그리고 년, 월, 일의 구분기호가 달라졌습니다.
시간 formatting에서 중요한 것은 %H, %S, %m, %Y 등 format을 지시하는 문자들의 대소문자 구분을 한다는 것입니다.
t5는 %Y가 아닌 %y로 formatting 했으므로 2020년이 아니라 20년으로 표시됩니다.
대표적으로 쓰이는 formatting 기호는 다음과 같습니다.
%Y : 년도(year)를 네 자리수로 나타냅니다.(e.g. 0001, 0002, ..., 2019, 2020, ..., 9999)
%y : 년도(year)를 두 자리수로 나타냅니다.(e.g. 01, 19, 20, ..., 99)
%m : 월(month)을 두 자리수로 나타냅니다.(e.g. 01, 02, ..., 11, 12)
%d : 일(day)을 두 자리수로 나타냅니다.(e.g. 01, 02, ..., 30, 31)
%H : 시간(hour)을 두 자리수로 나타냅니다.(e.g. 00, 01, ..., 22, 23)
%M : 분(minute)을 두 자리수로 나타냅니다.(e.g. 00, 01, ..., 58, 59)
%S : 초(second)를 두 자리수로 나타냅니다.(e.g. 00, 01, ..., 58, 59)
%B : 월(month)을 해당 월의 Full Name으로 나타냅니다.(e.g. January, February, March, ..., November, December)
좀 더 많은 datetime format을 알고 싶다면 아래 링크에서 알아볼 수 있습니다.
Python strftime()
아래 table은 format의 종류를 나타냅니다.
Format | Description | e.g. |
%Y | 네 자리 수 년도 | 2020 |
%y | 세기 부분을 제외한 년도 출력 | 01 |
%m | 두 자리 수 월 | [01, 02, ..., 12] |
%d | 두 자리 수 일 | [01, 02, ..., 31] |
%H | 두 자리 수 시간(24시 기준) | [01, 02, ..., 23] |
%M | 두 자리 수 분 | [01, 02, ..., 59] |
%S | 두 자리 수 초 | [01, 02, ..., 59] |
%a | 요일 줄임말 | Mon |
%A | 요일 풀네임 | Monday |
%b | 달 줄임말 | Jan |
%B | 달 풀네임 | January |
%I | 두 자리 수 시간(12시 기준) | [01, 02, ..., 12] |
%p | AM or PM | AM |
%j | 1년중 누적 날짜 | [1, ..., 366] |
%U | 누적 주차(일요일이 시작, 토요일이 끝) | [00, ..., 53] |
%W | 누적 주차(월요일이 시작, 일요일이 끝 | [00, ..., 53] |
%c | 날짜와 시간을 출력 | 20/03/13 00:15:35 |
%w | 숫자로 된 요일 | [0(일요일), ..., 6] |
%x | 현재 설정된 로케일에 기반한 날짜 출력 | 20/03/13 |
%X | 현재 설정된 로케일에 기반한 시간 출력 | 00:15:35 |
%Z | 시간대 출력 | 대한민국 표준시 |
%% | 문자 | % |
datetime module에 속한 datetime class에 있는 strptime method는 날짜와 시간을 명시하는 특정 문자로부터 날짜, 시간 정보를 추출하여 datetime object를 생성합니다.
import datetime
date_sample = 20211025
print(date_sample)
date_object = datetime.datetime.strptime(str(date_sample), '%Y%m%d')
print(date_object)
-- Result
20211025
2021-10-25 00:00:00
위 예시는 20211025라는 단순한 숫자를 날짜로 바꾸는 예시입니다.
먼저 strptime을 적용하려면 20211025라는 숫자가 아닌 이걸 문자로 바꿔줘야합니다.
그래서 str(date_sample)로 적어준것이죠.
strptime(str(date_sample), "%Y%m%d")
위 부분을 보면 20211025라는 문자를 봅시다.
이 문자는 YYYYMMDD의 형식입니다.
따라서 네자리수 년도를 나타내는 %Y, 두자리수 월을 나타내는 %m, 두자리수 일을 나타내는 %d를 합해 "%Y%m%d"라는 패턴으로 적어준 것입니다.
즉, 날짜로 바꿀 원본 데이터(여기서는 20211125)에서 어떤 부분이 각각 년/월/일에 해당하는지를 나타내는 패턴을 적어주는것이죠.
그래서 output 결과를 보면 20211025라는 문자가 날짜형식으로 바뀌었음을 볼 수 있습니다.
import datetime
date_sample = '2021 10 25'
print(date_sample)
date_object = datetime.datetime.strptime(date_sample, '%Y %m %d')
print(date_object)
-- Result
2021 10 25
2021-10-25 00:00:00
위 예시는 date_sample의 형태가 좀 다릅니다.
YYYY MM DD로서 년/월/일 사이에 공백이 있는 패턴이죠.
그래서 strptime의 인자 중 하나인 패턴인자로서 이 공백을 반영하여 '%Y %m %d'로 공백까지 포함하여 적어준 것입니다.
import datetime
date_sample = '9 March, 2020'
print(date_sample)
date_object = datetime.datetime.strptime(date_sample, '%d %B, %Y')
print(date_object)
- Result
9 March, 2020
2020-03-09 00:00:00
위 예시에서 date_object를 보면 strptime method는 두 가지 인자를 받습니다.
첫 번째로 date_sample에 주어진 9 March, 2020라는 글자를 받고,
이 글자의 format이 '일(%d) 월의 영어 full name(%B), 네 글자 년도(%Y)'의 format이라는 format 정보를 받습니다.
그러면 strptime method는 이를 인식하여 2020-03-09 00:00:00라는 일반적인 datetime 형태로 값을 전환해줍니다.
strptime에 해대 좀 더 많은 내용 알고 싶다면 아래 링크에서 알아볼 수 있습니다.
Python strptime()
'Python > Python datetime' 카테고리의 다른 글
Python datetime : weekday, isoweekday (week day number 요일번호 추출) (0) | 2021.03.27 |
---|---|
Python datetime : isocalendar, strftime('%U'), strftime('%W') (week number 추출) (0) | 2020.12.23 |
Python datetime : timedelta(시간 또는 날짜의 차이) (0) | 2020.12.23 |
Python datetime : now(현재 날짜와 시간) & today(현재 날짜) (0) | 2020.12.23 |
Python datetime : datetime class(날짜 + 시간 객체) (0) | 2020.12.23 |