데이터 유형 변환의 중요성
프로그래밍 언어에서 한 데이터 유형을 다른 유형으로 변경하는 과정은 매우 중요합니다. 대부분의 언어는 기본 데이터 유형 간의 변환을 기본적으로 지원합니다. 하지만 datetime
과 같은 사용자 정의 데이터 유형은 추가 모듈을 필요로 합니다. 특히 날짜 및 시간 관련 작업은 프로그래머에게 어려운 과제이므로 이러한 모듈은 필수적입니다. 다행히도 파이썬은 datetime
과 효과적으로 작동하는 내장 모듈을 제공합니다.
이제 파이썬에서 datetime
문자열을 datetime
객체로 변환하는 여러 방법을 살펴보겠습니다. 그 전에 먼저 변환이 왜 필요한지 이해하는 것이 중요합니다.
왜 datetime
문자열을 datetime
객체로 변환해야 할까요?
날짜 데이터를 다룰 때, 문자열 형식은 작업을 복잡하게 만듭니다. datetime
형식으로 변환하면 작업이 훨씬 수월해집니다. 문자열 형식의 날짜는 단순한 텍스트 조각일 뿐이며, 특별한 날짜 관련 기능을 제공하지 않습니다. 문자열 메서드만 사용할 수 있기 때문에 날짜 관련 작업이 불가능합니다.
예를 들어, 두 날짜를 비교해야 한다고 가정해 봅시다. 문자열 형식으로는 올바르게 비교하기 어렵습니다. 그러나 datetime
객체라면 숫자처럼 비교 연산자를 사용하여 간단하게 비교할 수 있습니다.
이것은 datetime
형식 변환이 유용한 한 가지 예일 뿐입니다. 날짜를 더하거나 빼는 작업, 시간대 처리 등 다양한 상황에서 datetime
문자열을 datetime
객체로 변환하면 작업이 훨씬 쉬워집니다.
이제 다양한 방법을 통해 datetime
문자열을 datetime
객체로 변환하는 방법을 알아봅시다. 내장된 datetime
모듈과 타사 dateutil
모듈을 활용하여 변환을 수행할 것입니다. 먼저 datetime
모듈부터 시작해 보겠습니다.
datetime
모듈 활용
datetime
은 파이썬의 내장 모듈로, 날짜와 시간을 처리하는 데 사용됩니다. 이 모듈은 날짜와 시간 관련 작업을 위한 다양한 클래스를 제공합니다. 변환 작업에는 datetime.datetime
클래스를 사용할 것입니다.
datetime.datetime
클래스에는 여러 메서드가 있지만, 변환 작업에 핵심적인 메서드는 strptime
입니다. 좀 더 자세히 살펴보겠습니다.
datetime.strptime
datetime.strptime
메서드는 datetime
문자열을 datetime
객체로 변환하는 데 사용됩니다. 이 메서드는 두 개의 문자열 인수를 받습니다. 첫 번째는 변환할 datetime
문자열이고, 두 번째는 해당 문자열의 형식입니다. 메서드는 datetime
객체를 반환합니다.
다음은 예시입니다.
from datetime import datetime
string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))
위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
2022-12-19 21:37:56
datetime
문자열이 datetime.strptime
메서드를 통해 datetime
객체로 성공적으로 변환되었습니다. 이때 메서드에 제공하는 형식 문자열이 입력 datetime
문자열과 정확하게 일치해야 합니다. 그렇지 않으면 오류가 발생하거나 잘못된 결과가 나타날 수 있습니다.
날짜/시간 형식을 지정할 때 몇 가지 형식 코드를 사용했습니다. 사용 가능한 모든 형식 코드는 공식 문서를 참조하시기 바랍니다.
datetime.strptime
메서드는 날짜와 시간이 모두 포함된 완전한 datetime
객체를 반환합니다. 날짜와 시간을 개별적으로 가져오려면 반환된 datetime
객체의 date()
및 time()
메서드를 사용할 수 있습니다. 다음 코드를 살펴봅시다.
from datetime import datetime
string = "19-12-2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
## getting date separately
print("Date:", datetime.strptime(string, formatting).date())
## getting time separately
print("Time:", datetime.strptime(string, formatting).time())
위 코드를 실행하면 다음 결과가 출력됩니다.
Date: 2022-12-19
Time: 21:37:56
date()
및 time()
메서드는 각각 날짜와 시간에 대한 객체를 반환하며, 각각 추가적인 메서드를 제공합니다.
위 예제에서는 datetime.strptime
메서드에 올바른 문자열과 형식을 제공했습니다. 잘못된 정보를 제공하면 오류가 발생합니다. 이러한 오류를 처리하는 방법을 알아보겠습니다. 다음 코드를 실행해 봅시다.
from datetime import datetime
string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))
위 코드는 형식 문자열이 입력 datetime
문자열과 일치하지 않기 때문에 오류를 발생시킵니다. 이러한 오류를 처리하기 위해 파이썬의 try-except
블록을 사용할 수 있습니다. 코드를 수정해 봅시다.
from datetime import datetime
try:
string = "19:12:2022 09:37:56 PM"
formatting = "%d-%m-%Y %I:%M:%S %p"
print(datetime.strptime(string, formatting))
except ValueError as error:
print(error)
이제 코드를 다시 실행하면, 프로그램이 중단되지 않고 다음과 같은 오류 메시지를 출력합니다.
time data '19:12:2022 09:37:56 PM' does not match format '%d-%m-%Y %I:%M:%S %p'
유사하게 앞으로 살펴볼 parser.parse
메서드에도 try-except
블록을 추가하여 프로그램이 중간에 중단되는 것을 방지할 수 있습니다. 이는 본 튜토리얼 내용과 직접적인 관련은 없지만 코드에서 오류를 처리하는 것을 상기시켜 줍니다.
이것으로 datetime
모듈에 대한 설명은 마칩니다. 다음으로 dateutil
모듈로 넘어가겠습니다.
dateutil
모듈 활용
dateutil
모듈은 datetime
모듈의 기능을 확장하며, 날짜 및 시간 관련 작업을 훨씬 편리하게 만들어줍니다. 다음 명령을 사용하여 모듈을 설치할 수 있습니다.
pip install python-dateutil
여기서는 dateutil.parser.parse
메서드에 집중할 것입니다. 이 메서드를 사용하여 datetime
문자열을 datetime
객체로 변환하는 방법을 살펴보겠습니다.
parser.parse
parser.parse
메서드는 datetime
문자열을 입력받아 해당하는 datetime
객체로 변환합니다. 이 메서드는 문자열의 형식을 지정할 필요가 없습니다. 입력된 datetime
문자열을 자동으로 인식하여 datetime
객체로 변환합니다. 예를 들어 보겠습니다.
from dateutil import parser
string = "19-12-2022 09:37:56 PM"
print(parser.parse(string))
위 코드를 실행하면 다음 결과가 출력됩니다.
2022-12-19 21:37:56
datetime
문자열은 parser.parse
메서드에서 허용되는 특정 형식을 따라야 합니다. 입력된 문자열의 형식이 허용되지 않으면 오류가 발생합니다. 자동 변환을 위해 허용되는 날짜 및 시간 문자열 형식은 공식 문서를 참고하시기 바랍니다.
parser.parse
메서드도 datetime
객체를 반환하므로, datetime
모듈에서와 마찬가지로 date()
및 time()
메서드를 사용하여 날짜와 시간 객체에 개별적으로 접근할 수 있습니다. 다음 코드를 보겠습니다.
from dateutil import parser
string = "19-12-2022 09:37:56 PM"
print("Date:", parser.parse(string).date())
print("Time:", parser.parse(string).time())
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Date: 2022-12-19
Time: 21:37:56
보시다시피 dateutil
을 사용하면 날짜와 시간을 상대적으로 쉽게 다룰 수 있습니다. 모듈의 다양한 기능은 공식 문서를 통해 확인하실 수 있습니다.
결론
내장 모듈인 datetime
과 타사 모듈인 dateutil
을 사용하여 datetime
문자열을 datetime
객체로 변환하는 방법을 살펴보았습니다. datetime
문자열을 datetime
객체로 변환하는 또 다른 내장 모듈인 time
모듈도 있습니다. 직접 시도해 보세요. 이미 다른 모듈을 사용해 비슷한 작업을 해봤기 때문에 어렵지 않을 것입니다.
이 외에도 같은 작업을 수행할 수 있는 라이브러리가 더 있을 수 있습니다. 이 튜토리얼에서 사용한 모듈들은 표준적이며 널리 사용됩니다. 다른 모듈에 대해서도 더 자세히 알아보고 자신에게 가장 적합한 것을 선택할 수 있습니다.
또한 파이썬에서 시간 차이를 계산하는 방법도 살펴보세요.
즐거운 코딩 되세요! 🙂