Python 처리 날짜를 사용하는 방법
추정 독자
TL;DR
datetime형의 편리한 곳
파이썬이 날짜를 처리할 때datetime형의 사용 방법을 모르는 사람들은 문자열로만 조작할 수 있습니다.
문자열이라도 형식에 따라 비교할 수 있고 간단한 용도라면 가능합니다.
그러나 날짜가datetime형으로 유지되면 몇 가지 편리한 기능을 사용할 수 있다.
다음은 두 가지를 소개합니다.
timedelta를 통한 시간 상가감법
from datetime import datetime, timedelta
# 起点となる日付のdatetime型の値を定義する
dt = datetime.fromisoformat("2021-01-02T00:00:00")
# 1秒、1分、1時間、1日を起点となる日付に加算する
a = dt + timedelta(seconds=1)
print(a) # -> 2021-01-02 00:00:01
b = dt + timedelta(minutes=1)
print(b) # -> 2021-01-02 00:01:00
c = dt + timedelta(hours=1)
print(c) # -> 2021-01-02 01:00:00
d = dt + timedelta(days=1)
print(d) # -> 2021-01-03 00:00:00
# 減算もできる
e = dt - timedelta(seconds=1)
print(e) # -> 2021-01-01 23:59:59
f = dt - timedelta(minutes=1)
print(f) # -> 2021-01-01 23:59:00
g = dt - timedelta(hours=1)
print(g) # -> 2021-01-01 23:00:00
h = dt - timedelta(days=1)
print(h) # -> 2021-01-01 00:00:00
년, 월, 일, 시, 분, 초만 꺼내기
print(dt.year) # -> 2021
print(dt.month) # -> 1
print(dt.day) # -> 2
print(dt.hour) # -> 0
print(dt.minute) # -> 0
print(dt.second) # -> 0
datetime.fromissoformat () 를 기억하세요
위에서 말한 바와 같이 편리한 데이터 형식이지만 스스로 데이터 유형의 값을 만들 때 다양한 방법이 있다.
자세히 보면 날짜타임이야.strptime () 를 사용하는 방법, 그리고 다른 방법이 있습니다.
개인적으로datetime.fromissoformat () 를 추천합니다.
from datetime import datetime
# datetime()に年,月,日,時,分,秒の引数を渡して作る
a = datetime(2021, 1, 2, 0, 0, 0)
print(a) # -> 2021-01-02 00:00:00
# datetime.strptime()を使う
b = datetime.strptime("2021-01-02 00:00:00", "%Y-%m-%d %H:%M:%S")
print(b) # -> 2021-01-02 00:00:00
# datetime.fromisoformat()を使う
c = datetime.fromisoformat("2021-01-02T00:00:00")
print(c) # -> 2021-01-02 00:00:00
ISO8601 형식 이해
상술한 데이터.fromissoformat () 에서는 ISO8601 형식의 날짜와 시간을 문자열 (이하 날짜와 시간 문자열) 로 표시하는 세계 통일 규칙을 사용합니다.
ISO8601 형식이라면 날짜와 시간 문자열의 기록 방법을 확정할 수 있기 때문에 문자열에서 데이터 형식으로 변환(이하 퍼스라고 부른다)은 매우 간단하다.
datetime.strptime () 로 날짜와 시간 문자열을 지울 때, 문자열에 따라 사선 구분자나 문자 구분자까지 매번 퍼스 형식으로 하는 것은 번거롭지 않습니까?
만약 날짜와 시간 문자열을 모두 ISO8601 형식으로 쓰면 그런 형식에 신경 쓰지 않고 긁을 수 있다.
또한 데이터 형식이 문자열로 출력되는 경우도 데이터 타임이다.isoformat()를 사용할 수 있습니다.
벌써 날짜 타임이야.strptime () 와datetime.strftime () 중 어느 것이 해석 함수이고, 어느 것이 문자열 출력 함수인지 고민할 필요가 없습니다.
날짜와 시간 문자열은 기본적으로 모두 ISO8601 형식을 사용합니다.
from datetime import datetime
# ISO8601形式の文字列からdatetime型に変換
dt = datetime.fromisoformat("2021-01-02T00:00:00")
# datetime型の値をISO8601形式で出力する
print(dt.isoformat()) # -> '2021-01-02T00:00:00'
aware datetime형을 사용하세요.
파이톤의datetime형은aware,naive 두 가지가 있습니다.
aware는 시간대 정보가 있는 데이터 형식입니다
naive는 시간대 정보가 없는datetime형입니다.
시구어
우리가 사용하는 날짜와 시간 문자열은 장소에 따라 달라집니다.
예컨대
도쿄의
2021-01-02T00:00:00
같은 시간 미국 뉴욕에서.
2021-01-01T10:00:00
.
즉, 어느 시간대의 시간입니까?이러한 정보가 없으면 시간대별 시간을 비교하거나 올바르게 표시할 수 없습니다.
Linux 로켈에 얽힌 이야기
이 문제는 특히 리눅스 서버에서 실행되는 파이톤이datetime형을 처리할 때 많은 어려움을 겪는다.
Linux 서버 자체는 어느 시간대입니까?확실한 정보
서버 설정에 따라 이 시간대 설정은 일본 시간이 아닐 수도 있습니다.
이때,datetime.now()에서 지금의 시간을 얻더라도 일본과 시간을 엇갈리는 시간을 갖게 된다.
시간대 보이기 및 현재 시간대 aware 가져오기
위에서 말한 바와 같이datetime.now () 를 실행하면 서버의 설정에 좌우되지 않고 aware의 데이터 형식을 얻을 수 있습니다.
datetime.now()의 반환값은 소수점 이하의 초를 포함하기 때문이다
datetime.isoformat () 를 사용할 때 timespec 매개 변수에 "seconds"를 지정하면
초만 표시됩니다.
from datetime import datetime, timedelta, timezone
# 日本時間のタイムゾーンを定義
JST = timezone(timedelta(hours=+9), 'JST')
# Pythonが動くサーバーのタイムゾーン設定に左右されずに日本時間の現在時刻を取得
dt = datetime.now(JST)
# ISO8601形式で表示
print(dt.isoformat()) # -> 2021-04-14T01:57:42.809986+09:00
# 小数点以下の秒数が邪魔なので秒数までを表示する
print(dt.isoformat(timespec="seconds")) # -> 2021-04-14T01:57:42+09:00
datetime.fromissoformat()로 aware의datetime형 만들기
날짜와 시간 문자열에 따라 aware의 데이터 형식을 만드는 경우도datetime입니다.fromissoformat () 이면 됩니다.
끝에만 일본시간임을 표시하는 +09:00.
또한 시간대가 어디에 있는지 모르는 aware datetime형을 처리할 때 우선datetime입니다.astimezone () 를 사용하여 일본 시간의 시간대로 변경하면 날짜와 시간 문자열을 표시할 수도 있습니다.
쓰기 방법도 간단하기 때문에 파이톤이datetime형을 처리하는 상황에서 aware의datetime형을 사용하면서 날짜 문자열을 표시하기 전에 반드시 JST 시간대 문자열로 표시해야 날짜의 번거로움을 줄일 수 있다.
from datetime import datetime, timedelta, timezone
# awareなdatetime型を定義
dt = datetime.fromisoformat("2021-01-02T00:00:00+09:00")
print(dt.isoformat()) # -> 2021-01-02T00:00:00+09:00
# あるdatetime型がどのタイムゾーンか分からない場合は明示的にJST時間で表示させる
# 日本時間のタイムゾーンを定義
JST = timezone(timedelta(hours=+9), 'JST')
# 変換元datetimeのタイムゾーン設定に左右されずにタイムゾーンを日本時間にしたdatetime型を取得する
jst_dt = dt.astimezone(JST)
print(jst_dt.isoformat()) # -> 2021-01-02T00:00:00+09:00
Reference
이 문제에 관하여(Python 처리 날짜를 사용하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/toriwasa/articles/0b842ec4a3cb65텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)