Notice
Recent Posts
Recent Comments
Link
관리 메뉴

윤일무이

[백준-Python] 10699번: 오늘 날짜 본문

🥧 Python/⚙️ 코딩테스트

[백준-Python] 10699번: 오늘 날짜

썸머몽 2023. 2. 14. 17:26
728x90
 

10699번: 오늘 날짜

서울의 오늘 날짜를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

풀이

오늘 날짜를 출력하는 문제다.

매우 간단하게 print('2023-02-14')라고 해도 정답은 맞는데

이걸 원한 게 아닐 것 같다는 생각이 들었다. (당연함)

 

이 문제는 모듈을 활용해서 푸는 문제였는데, 모듈은 아직 내가 아는 개념이 아니다.

여기서 쓰이는 모듈은 datetime 이다.

 

https://docs.python.org/ko/3/library/datetime.html

날짜와 시간을 조작하는 클래스를 제공한다.

공식 문서를 보는데 가독성이 매우 좋지 않아서 이게 뭔 소리지 싶다...

 

datetime. 을 생략하고 싶다면 from datetime import datetime을 쓰면 된다.

ex. from datetime import datetime

datetime.today()

datetime.now() 

 

현재 날짜 가져오기 (microsecond까지 나온다)

import datetime

datetime.datetime.today()

datetime.datetime.now()

-> 2023-02-14 16:30:29.254842

 

microsecond를 빼고 싶다면 replace를 써도 된다.

(근데 빼기 보다 표기법을 바꾸면 될 것 같다.

이건 second와 microsecond에만 적용되며 전자의 경우 00으로 출력된다.)

import datetime
now = datetime.datetime.now()
print(now)
now_real = now.replace(microsecond=0)
print(now_real)

 

yyyy-mm-dd 형식으로 출력하려면

from datetime import datetime

now = datetime.now().date()

print(now)

>> 2023-02-14

 

현재 날짜 가져오기 (년, 월, 일, 시, 분 초)

import datetime

now = datetime.datetime.now() (이건 today로 선언해도 된다.)

print(now.year)

print(now.month)

... day, hour, minute, second, microsecond 까지 가져올 수 있다.

 

날짜에 숫자를 더하고 뺄 때 (month와 year은 안된다.)

이 때는 datetime.timedelta() 를 쓴다.

ex.now = datetime.datetime.now()

now += datetime.timedelta(seconds=3) # 3초 더하기 (빼기를 하고 싶으면 -를 붙이면 된다.)

print(now)

 

month와 year을 더하고 빼고 싶다면 'relativedelta'를 쓰면 된다.

from datetime import datetime, timedelta

from dateutil.relativedelta import relativedelta

now = datetime.now() # now = now.replace(microsecond=0) 하면 그냥 연월일 시분초만 나온다.

now_later = now + relativedelta(months=2) # 2달 후

print(now_later)

>> 2023-04-14 17:07:41.606659

 

걍 정리하다 보니 import datetime과 from datetime import datetime이 섞여 있는데

전자의 경우 할당할 때 datetime.datetime 두 번 써주면 되고

후자의 경우에는 datetime. 한번만 써줘도 된다.

 

코드

from datetime import datetime
now = datetime.now().date()
print(now)
728x90