Python

[datetime] 시간포맷: datetime.strftime("%Y-%m-%d")

hayjo 2020. 12. 18. 21:43

strftime으로 현재 시간 등을 출력할 때, 자주 안 쓰는 포맷코드는 기억하기가 쉽지 않다.

제목인 datetime.strftime("%Y-%m-%d")는 "2020-12-18"처럼 4자리 연도-2자리 월-2자리 일 형태다.

 

혹시 또 필요할 수 있으니, 자주 쓸 법한 것들은 정리해두고자 한다.

 

공식문서에서

strftime() and strptime() Format Codes(strftime()과 strptime() 포맷 코드)

로 검색하면 전체 테이블을 확인할 수 있다.

 

Directive Meaning Example
%a 짧은 요일이름 Sun, Mon, …, Sat..
%A 전체 요일이름 Sunday, Monday, …, Saturday
%w 숫자로 표현한 요일, 0이 일요일, 6이 토요일임 0, 1, …, 6
%d 연월일시의 '일'자. 0 패딩 들어감 01, 02, 03, ..., 31
%b 짧은 월 이름 Jan, Feb, ...
%B 전체 월 이름 January, February, …, December
%m 연월일시의 '월', 0 패딩 들어감 01, 02, ..., 12
%y 연도 뒤의 2자리 (2021년의 경우 21) 00, 01, ..., 99
%Y 연도 4자리, 0 패딩 들어감 0001, 0002, ..., 2013, 2014, ..., 9999
%H 24시간제의 시간, 0 패딩 들어감, 24가 없고 00이 있음 00, 01, 02, ..., 23
%p AM or PM AM, PM
%M 시간: 분: 초의 분, 0 패딩 들어감 00, 01, ..., 59
%S 시간: 분: 초의 초, 0 패딩 들어감 00, 01, ..., 59
%j 1년 중 몇 번째 '일'인지, 0 패딩 들어감 001, 002, ..., 366
%U 1년 중 몇 번째 '주'인지(일요일 시작 기준), 0 패딩 들어감 00, 01, ..., 53
%W 1년 중 몇 번째 '주'인지(월요일 시작 기준), 0 패딩 들어감 00, 01, ..., 53

숫자가 아닌 요일이나 월이름, AM/PM 같은 경우, locale 설정에 따라 출력값이 다르다고 한다.

 

 

자주 쓸 것 같은 조합

import time
import datetime

now = datetime.datetime.now()
finalDay = datetime.datetime(2020, 12, 31)
timedelta = finalDay - now

print("오늘 날짜: " + now.strftime("%Y-%m-%d"))
# 오늘 날짜: 2020-12-18

print("현재 시각: " + now.strftime("%H:%M:%S %p"))
# 현재 시각: 12:41:10 PM

print("오늘은 " + now.strftime("%Y년도의 " + "%j" + "번째 날입니다."))
# 오늘은 2020년도의 353번째 날입니다.

print("이번주는 " + now.strftime("%Y년도의 " + "%W" + "번째 주입니다."))
# 이번주는 2020년도의 50번째 주입니다.

print("올해 마지막 날까지 " + str(timedelta.days) + "일 남았습니다.")
# 올해 마지막 날까지 12일 남았습니다.

print("올해 마지막 날까지 총 " + str(timedelta.total_seconds()) + "초 남았습니다.")
# 올해 마지막 날까지 총 1077529.023712초 남았습니다.

현재 시간을 epoch time으로 표현하고 싶다면

import datetime
a = datetime.datetime.now() # datetime.datetime(2020, 12, 21, 13, 20, 49, 928330)
b = datetime.datetime(1970,1,1) # datetime.datetime(1970, 1, 1, 0, 0)
c = a-b # datetime.timedelta(days=18617, seconds=48049, microseconds=928330)
c.total_seconds() # 1608556849.92833

우분투에서는 아래처럼 하면 된다.

# date +%s // 1608524666