django 시간대 문제 해결

3476 단어 django시간대

앞말


우리는 모두 시간대, 표준 시간대가 UTC 시간대라는 것을 알고 있다.django가 기본적으로 사용하는 것은 UTC 시간대이기 때문에 우리가 데이터베이스에 저장하는 시간은 UTC의 시간이다. 그러나 우리가 하는 사이트는 국내 사용자만을 대상으로 하거나 내부 플랫폼만 제공하여 사용한다. 우리는 데이터베이스에 저장하는 시간이 현지 시간(동팔구의 시간)이 되기를 바란다. 그러면 django도 이러한 수요를 완성할 수 있다.

await 시간과 navie 시간


await 시간과 Navie 시간은 무엇입니까?우리python의 두 가지 시간 유형입니다.
  • 나비: 자신의 시간이 어느 시간대를 표시하는지 몰라요
  • await: 자신의 시간이 어느 시간대를 표시하는지 알기
  • django 동8구 시간 설정


    우리는django의 시간대를 동팔구로 바꾸고 싶은 시간입니다. 간단합니다.
    
    USE_TZ = False
    TIME_ZONE = 'Asia/Shanghai'
    
    설정 중입니다.py 파일에서 USE_TZ를 False로 설정하고 TIME_ZONE을 아시아 상하이로 설정한 후에 우리가 모델에서 시간 필드를 만들 때 데이터베이스에 저장된 것은 바로 동팔구의 시간이다. 시간의 유형은 나비 유형을 만들 수 있기 때문에 우리는 나비 유형의 시간을 다른 시간대의 유형으로 바꿀 수 없기 때문에 우리는 일반적으로 이렇게 하는 것을 권장하지 않는다. 

    django UTC 시간대 설정


    django에서 기본적으로 설정한 것은 UTC 시간대이기 때문에 우리 데이터베이스에 저장된 시간은 UTC 시간대의 시간, 즉 0 시간대입니다. 우리가 정상적으로 본 것보다 8시간이 적지만 그 시간은await 형식으로 임의의 시간으로 전환할 수 있습니다.
    django에서 두 가지 시간을 제공하는 방법
  • django.utils.timezone.now: 설정에 따라py 파일에 USE_ 설정 여부TZ=True 현재 시간을 가져옵니다.Ture라면 aware 형식의 UTC 시간을 얻고, False면 Navie 형식의 시간을 얻습니다
  • django.utils.timezone.localtime: 설정에 따라.py의 TIME_ZONE에서 aware 유형의 시간을 TIME_로 변환합니다.ZONE에서 시간대를 지정합니다
  • 다음은 몇 가지 흔히 볼 수 있는 시간대 문제를 열거하고 관련 원인을 제공한다. 만약 잘못이 있다면 지적을 환영한다.


    문제1: 세 시간datetime.datetime.now()、datetime.datetime.utcnow () 와django.util.timezone.now()의 차이
    datetime.datetime.now (): 출력은 로컬 시간 (naive time) 과 설정과 아무런 관계가 없습니다.datetime.datetime.utcnow(): setting에서 USE_를 구성하면TZ=True는 UTC 시간(naive time)을 출력합니다. 설정에서 USE_를 설정하면TZ=False, 이 출력 시간과datetime.datetime.now () 는 완전히 같습니다.django.util.timezone.now(): setting에서 USE_를 구성하면TZ=True는 USE_를 구성하면 UTC 시간(active time)을 출력합니다.TZ=False,datetime.datetime.now () 는 완전히 같습니다.
    문제2:django가 데이터베이스에 저장된 시간이 로컬 시간보다 8시간 적습니까?
    우선 명확한 점은 Django1.4 버전 이전에 시간대에 대해 아무런 개념이 없고 시간에 대한 접근, 전시에 대해 아무런 처리도 하지 않았다. 데이터베이스에 저장된 것은 보통 로컬 시간이고 물론naive time이다.
    Django는 1.4 버전 이후에 저장됩니다.TZ=True, 데이터베이스에 저장된 시간은 영원히 UTC 시간입니다.이때 설정에 USE_가 설정되어 있다면...TZ=True 및 TIME_ZONE ='UTC', datetime으로.datetime.now()에서 얻은 시간django는 이 시간을 UTC 시간으로 데이터베이스에 저장합니다.수정이 USE_로 설정된 경우TZ=True 및 TIME_ZONE ='Asia/Shanghai', datetime으로.datetime.()에서 얻은 시간은 시간대가 없기 때문에 django는 이 시간을 아시아/Shanghai 시간, 즉 동팔구 시간으로 간주하고 django는 이 시간을 시간대 UTC 시간으로 바꾸어 데이터베이스에 저장한다. 읽을 때 UTC 시간에 따라 읽는다. 이것이 바로 인터넷에서 많은 사람들이 만나는 데이터베이스에 저장된 시간이 현지 시간보다 8시간 적은 이유이다.
    문제3: DateTimeField role_cost_history.cost_time received a naive datetime (2015-05-12 19:59:01.259517) while time zone support is active?
    이 문제는 만약에 USE를 설치했다면_TZ=True 이후 모델에서는 DateTimeField가 UTC 시간(시간이 있는 시간)을 사용한다고 생각했는데 이때datetime을 사용합니다.datetime.now () 에서 얻은 시간은 시간대가 없으면 이 문제를 보고합니다.
    문제4:django.util.timezone.now () 출력 시간이 로컬 시간보다 8시간 적음
    USE_만 설정하면TZ=True,django.util.timezone.now () 출력은 항상 UTC 시간입니다. 당신이 설정한 TIME_ZONE이 뭐야?하면, 만약, 만약...TZ=False, 즉django.util.timezone.now () 출력은datetime와 같습니다.datetime.now(), TIME_ZONE이 설정한 것은 무엇입니까?
    질문 5: 템플릿 표시 시간
    USE_가 설정되어 있습니다TZ=True 이후 TIME_ 설정ZONE ='Asia/Shanghai', 데이터베이스에 UTC 시간이 저장되어 있지만 템플릿이 표시될 때 TIME_ZONE과 같은 로컬 시간이 표시됩니다.
    권장 사항: 시간을 통일하기 위해 django 개발 시 UTC 시간, 즉 USE_ 설정TZ=True,TIME_ZONE ='Asia/Shanghai', 그리고 시간을 얻을 때 django를 사용합니다.util.timezone.now().백그라운드 프로그램 사용 시간이 UTC 시간으로 충족되고 템플릿 시간의 정확한 표시를 보장할 수 있기 때문이다.
    이 django 시간대 문제 해결에 관한 글은 여기까지 소개합니다. 더 많은 django 시간대 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기