파이썬에서 날짜 조작하기

파이썬에서 날짜 조작하기

이 글은 파이썬에서 날짜를 다루는 방법을 설명합니다.

YouTube Video

파이썬에서 날짜 조작하기

파이썬에서 날짜 조작은 주로 datetime 모듈을 사용합니다. 이 모듈은 날짜와 시간을 조작할 수 있는 다양한 클래스와 함수를 제공합니다.

아래는 datetime 모듈을 사용한 기본 날짜 조작 예제입니다.

날짜 및 시간 가져오기

다음과 같이 현재 날짜와 시간을 얻을 수 있습니다. datetime.now()datetime.today()는 거의 동일한 결과를 반환하지만, 시간대(time zone)의 처리 방식에 차이가 있을 수 있습니다.

1from datetime import datetime
2
3# Get the current date and time
4now = datetime.now()
5print(f"Current date and time: {now}")
6
7# Get today's date only
8today = datetime.today()
9print(f"Today's date: {today.date()}")
  • 이 코드는 현재 날짜와 시간, 그리고 오늘 날짜만을 가져와서 출력합니다.

특정 날짜 및 시간 생성하기

다음과 같이 특정 날짜와 시간을 생성할 수 있습니다.

1from datetime import datetime
2
3# Create a specific date and time
4specific_date = datetime(2023, 11, 7, 10, 30, 45)
5print(f"Specified date and time: {specific_date}")
  • 이 코드는 지정한 날짜와 시간(2023년 11월 7일 10:30:45)을 생성하여 출력합니다.

날짜 포맷팅

날짜 서식 지정은 다음과 같이 할 수 있습니다.

1from datetime import datetime
2
3now = datetime.now()
4
5# Format the date
6formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
7print(f"Formatted date and time: {formatted_date}")
  • 이 코드는 현재 날짜와 시간을 가져와 strftime을 사용해 지정한 형식으로 변환하여 출력합니다.

날짜 포맷 문자열

  • %Y: 연도 (4자리 수)
  • %m: 월 (01에서 12)
  • %d: 일 (01에서 31)
  • %H: 시간 (00에서 23)
  • %M: 분 (00에서 59)
  • %S: 초 (00에서 59)

날짜 문자열 파싱

날짜를 나타내는 문자열을 datetime 객체로 변환할 수 있습니다.

1from datetime import datetime
2
3date_string = "2023-11-07 10:30:45"
4parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
5print(f"Parsed date and time: {parsed_date}")
  • 이 코드는 문자열로 된 날짜를 strptime()을 사용하여 datetime 객체로 변환하고 출력합니다.

날짜 연산

날짜 계산은 다음과 같이 할 수 있습니다.

 1from datetime import datetime, timedelta
 2
 3now = datetime.now()
 4
 5# Date for one day later
 6tomorrow = now + timedelta(days=1)
 7print(f"Date for one day later: {tomorrow}")
 8
 9# Date for one week ago
10last_week = now - timedelta(weeks=1)
11print(f"Date for one week ago: {last_week}")
12
13# Time for two hours later
14in_two_hours = now + timedelta(hours=2)
15print(f"Time for two hours later: {in_two_hours}")
  • 이 코드는 timedelta를 사용하여 현재 날짜와 시간에서 일(day)과 시간(hour)을 더하거나 빼서 내일, 일주일 전, 두 시간 후의 날짜와 시간을 계산하고 출력합니다.

시간대 처리

datetime 모듈로도 시간대 처리가 가능합니다.

 1from datetime import datetime, timezone, timedelta
 2
 3# Current UTC time
 4utc_now = datetime.now(timezone.utc)
 5print(f"Current UTC time: {utc_now}")
 6
 7# JST (UTC+9)
 8jst = timezone(timedelta(hours=9))
 9jst_now = datetime.now(jst)
10print(f"Current JST time: {jst_now}")
  • datetime은 기본적으로 'naive datetime'(시간대 정보가 없는 객체)을 반환합니다. timezone 클래스나 zoneinfo를 사용해 시간대를 명시적으로 처리할 수 있습니다.

date 클래스와 time 클래스

datetime 모듈로 날짜만 혹은 시간만도 다룰 수 있습니다.

1from datetime import date, time
2
3d = date(2023, 11, 7)
4t = time(10, 30, 45)
5
6print(f"Date only: {d}")
7print(f"Time only: {t}")
  • date 클래스는 날짜만을, time 클래스는 시간만을 다룹니다.

datetimetimestamp 간의 변환

UNIX 타임스탬프와 datetime 객체 간의 변환이 가능합니다. 여기서 UNIX 타임스탬프는 1970년 1월 1일 이후 경과한 초(second) 단위의 값을 의미합니다.

 1from datetime import datetime
 2
 3now = datetime.now()
 4
 5# datetime → timestamp
 6timestamp = now.timestamp()
 7print(f"Timestamp: {timestamp}")
 8
 9# timestamp → datetime
10restored = datetime.fromtimestamp(timestamp)
11print(f"Restored datetime: {restored}")
  • 이 코드는 현재 날짜와 시간을 UNIX 타임스탬프로 변환한 뒤, fromtimestamp() 함수를 사용해 다시 datetime 객체로 변환합니다.

자주 하는 실수

datetime 모듈을 사용할 때는 다음 사항에 유의해야 합니다.

  • datetime.now()는 시간대를 고려하지 않으므로 국제화 시에는 timezone.utc를 명시적으로 사용해야 합니다.
  • 포맷 문자열에서 %m(월)과 %M(분)을 혼동하지 않도록 주의하세요.

요약

datetime 모듈은 유연한 날짜 및 시간 조작을 위한 많은 기능도 제공합니다. 또한, 특정 작업을 위한 date, time, timedelta와 같은 클래스도 이용할 수 있습니다.

다른 라이브러리를 사용하면 더 고급스러운 날짜 조작이 가능합니다. 예를 들어, pandas는 시계열 데이터를 처리하는 데 특화되어 있고, dateutil은 복잡한 날짜 파싱에 적합합니다. 또한, arrow 라이브러리도 유용합니다.

위의 기사를 보면서 Visual Studio Code를 사용해 우리 유튜브 채널에서 함께 따라할 수 있습니다. 유튜브 채널도 확인해 주세요.

YouTube Video