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