143 lines
5.9 KiB
Markdown
143 lines
5.9 KiB
Markdown
# 날짜와 시간
|
|
파이썬에서 날짜와 시간을 다루기 위해 주로 datetime 모듈을 사용합니다. 이 모듈은 날짜와 시간 관련 다양한 클래스와 메서드를 제공하여 날짜 계산, 시간 차이 계산, 포맷팅 등 다양한 작업을 수행할 수 있도록 합니다.
|
|
|
|
## datetime 모듈의 주요 클래스
|
|
* datetime: 날짜와 시간을 함께 나타내는 클래스입니다.
|
|
* date: 날짜만 나타내는 클래스입니다.
|
|
* time: 시간만 나타내는 클래스입니다.
|
|
* timedelta: 두 날짜 또는 시간 사이의 차이를 나타내는 클래스입니다.
|
|
|
|
```python
|
|
import datetime
|
|
|
|
# 현재 시간 가져오기
|
|
now = datetime.datetime.now()
|
|
print(now) # 출력 예: 2023-11-22 14:34:27.123456
|
|
|
|
# 특정 날짜 생성
|
|
birthday = datetime.date(1990, 12, 25)
|
|
print(birthday) # 출력 예: 1990-12-25
|
|
|
|
# 날짜와 시간 계산
|
|
time_difference = datetime.datetime.now() - birthday
|
|
print(time_difference) # 출력 예: 12186 days, 14:34:27.123456
|
|
|
|
# 하루를 더한 날짜
|
|
today = datetime.date.today()
|
|
tomorrow = today + datetime.timedelta(days=1)
|
|
print(tomorrow) # 예: 2023-11-23
|
|
|
|
# 날짜 포맷팅
|
|
formatted_date = birthday.strftime("%Y년 %m월 %d일")
|
|
print(formatted_date) # 출력 예: 1990년 12월 25일
|
|
```
|
|
|
|
## 주요 메서드 및 속성
|
|
* now(): 현재 시각을 반환합니다.
|
|
* today(): 오늘 날짜를 반환합니다.
|
|
* strftime(): 날짜와 시간을 지정된 형식의 문자열로 변환합니다.
|
|
* strptime(): 문자열을 datetime 객체로 변환합니다.
|
|
* year, month, day, hour, minute, second: 각각 연도, 월, 일, 시, 분, 초를 나타내는 속성입니다.
|
|
* weekday(): 요일을 숫자로 반환합니다 (0: 월요일, 1: 화요일, ...).
|
|
* timedelta: 두 datetime 객체의 차이를 나타내며, 일, 시간, 분, 초 등을 계산할 수 있습니다.
|
|
|
|
## 날짜와 시간 포맷팅
|
|
strftime 메서드를 사용하여 다양한 형식으로 날짜와 시간을 표현할 수 있습니다.
|
|
|
|
* %Y 4자리 연도
|
|
* %m 월 (01-12)
|
|
* %d 일 (01-31)
|
|
* %H 24시간 형식 시 (00-23)
|
|
* %M 분 (00-59)
|
|
* %S 초 (00-59)
|
|
* %A 요일 (Monday, Tuesday, ...)
|
|
* %B 월 (January, February, ...)
|
|
|
|
## 시간대
|
|
pytz 모듈은 파이썬에서 다양한 시간대를 정확하게 처리하기 위한 필수적인 도구입니다. 특히, 서머타임과 같은 복잡한 시간대 변화를 정확하게 반영하여 시간 계산을 수행할 수 있도록 지원합니다.
|
|
|
|
* 정확한 시간대 정보: 전 세계의 다양한 시간대 정보를 제공합니다.
|
|
* 서머타임 처리: 서머타임 시작 및 종료 시점을 정확하게 반영하여 계산합니다.
|
|
* 시간대 변환: 다른 시간대 간의 시간 변환을 쉽게 수행할 수 있습니다.
|
|
|
|
```bash
|
|
pip install pytz
|
|
```
|
|
|
|
* Naive datetime: 시간대 정보가 없는 datetime 객체입니다.
|
|
* Aware datetime: 시간대 정보가 포함된 datetime 객체입니다.
|
|
* pytz는 대부분의 경우 Aware datetime을 사용합니다.
|
|
|
|
```python
|
|
import datetime
|
|
import pytz
|
|
|
|
# 특정 시간대 설정
|
|
tz = pytz.timezone('Asia/Seoul')
|
|
|
|
# 현재 시각을 해당 시간대로 변환
|
|
now = datetime.datetime.now(tz)
|
|
print(now) # 예: 2023-11-22 14:34:27+09:00
|
|
|
|
# UTC 시간을 특정 시간대로 변환
|
|
utc = datetime.datetime.utcnow()
|
|
local_dt = utc.astimezone(tz)
|
|
print(local_dt)
|
|
|
|
# 서울 시간을 뉴욕 시간으로 변환
|
|
seoul_tz = pytz.timezone('Asia/Seoul')
|
|
new_york_tz = pytz.timezone('America/New_York')
|
|
seoul_time = datetime.datetime.now(seoul_tz)
|
|
new_york_time = seoul_time.astimezone(new_york_tz)
|
|
print(new_york_time)
|
|
```
|
|
|
|
* 시간대 객체 생성: `pytz.timezone('시간대 이름')`을 통해 시간대 객체를 생성합니다.
|
|
* 시간대 변환: `astimezone()` 메서드를 사용하여 다른 시간대로 변환합니다.
|
|
* 시간대 목록: `pytz.all_timezones`를 통해 모든 지원되는 시간대 목록을 확인할 수 있습니다.
|
|
|
|
|
|
|
|
## 스케쥴
|
|
schedule 모듈은 파이썬에서 특정 시간이나 주기적으로 함수를 실행하도록 스케줄링하는 데 사용되는 간단하고 직관적인 라이브러리입니다. 별도의 설치가 필요 없이 바로 사용할 수 있으며, 복잡한 설정 없이 간단하게 작업을 예약할 수 있다는 장점이 있습니다.
|
|
|
|
* 시간 기반 스케줄링: 특정 시간에 함수를 실행하도록 설정할 수 있습니다.
|
|
* 주기적인 스케줄링: 매일, 매주, 매월 등 주기적으로 함수를 실행하도록 설정할 수 있습니다.
|
|
* 일회성 스케줄링: 한 번만 실행되는 작업을 예약할 수 있습니다.
|
|
* 다양한 시간 단위 지원: 초, 분, 시간, 일, 주 등 다양한 시간 단위를 지원합니다.
|
|
* 간단한 API: 직관적인 인터페이스를 제공하여 쉽게 사용할 수 있습니다.
|
|
|
|
```python
|
|
import schedule
|
|
import time
|
|
|
|
def job():
|
|
print("Hello, World!")
|
|
|
|
# 매일 오전 9시에 job 함수 실행
|
|
schedule.every().day.at("09:00").do(job)
|
|
|
|
# 무한 루프를 돌면서 스케줄된 작업 실행
|
|
while True:
|
|
schedule.run_pending()
|
|
time.sleep(1)
|
|
```
|
|
|
|
### 주요 메서드
|
|
* every(): 스케줄을 설정하는 시작점입니다.
|
|
* day, hour, minute, second: 각각 일, 시간, 분, 초 단위의 스케줄을 설정합니다.
|
|
* do(job): 실행할 함수를 지정합니다.
|
|
* run_pending(): 현재 시간에 실행해야 할 작업이 있는지 확인하고 실행합니다.
|
|
|
|
```python
|
|
# 매주 월요일 오후 5시에 작업 실행
|
|
schedule.every().monday.at("17:00").do(my_job)
|
|
|
|
# 5초마다 작업 실행
|
|
schedule.every(5).seconds.do(another_job)
|
|
```
|
|
|
|
* 무한 루프: schedule.run_pending()을 무한 루프 안에서 실행해야 스케줄된 작업이 정상적으로 수행됩니다.
|
|
* 시간 정확도: 시스템 시간에 의존하므로 시스템 시간이 정확하지 않으면 스케줄이 제대로 작동하지 않을 수 있습니다.
|
|
* 병렬 처리: schedule 모듈은 단일 스레드 환경에서 사용하기에 적합합니다. 병렬 처리가 필요한 경우 다른 라이브러리를 사용해야 합니다.
|