Python 처리 날짜를 사용하는 방법

15372 단어 Pythontech

추정 독자

  • 파이톤으로 날짜를 처리할 때 데이터 형식으로 처리하는 것은 매우 번거롭고 문자열로 프로그램을 쓰는 사람
  • Python을 사용하여 날짜 문자열과 데이터 형식을 서로 변환할 때의 데이터 시간입니다.strptime () 와datetime.strftime () 를 사용하는데 매번 누구를 쓸지 기억이 안 나는 사람
  • datetime.now() 사용 후 파이톤이 이동하는 서버의 언어 환경이 UTC에서 9시간 동안 엇갈려 괴로움을 겪은 사람
  • TL;DR

  • 날짜는 데이터 형식으로 처리하는 것이 비교적 편리하다
  • 파이썬에서 날짜와 시간 문자열을 처리할 때 ISO8601 형식으로 처리
  • 파이톤에서 ISO8601 형식의 문자열을 처리할 때 데이터 타임입니다.fromissoformat와datetime.isoformat () 편리
  • 날짜가 aware로 유지된 데이터 형식
  • datetime형의 편리한 곳


    파이썬이 날짜를 처리할 때datetime형의 사용 방법을 모르는 사람들은 문자열로만 조작할 수 있습니다.
    문자열이라도 형식에 따라 비교할 수 있고 간단한 용도라면 가능합니다.
    그러나 날짜가datetime형으로 유지되면 몇 가지 편리한 기능을 사용할 수 있다.
    다음은 두 가지를 소개합니다.

    timedelta를 통한 시간 상가감법

  • 데이터 유형은 초, 분, 시간, 일 단위로 덧셈과 뺄셈을 할 수 있다.
  • for,while 순환 중 제작이 1일마다 처리될 때 등이 편리합니다.
  • 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
    

    좋은 웹페이지 즐겨찾기