2014-05-11 2 views
2

나는 내가 뭘 잘못했는지 궁금합니다. 여기 시나리오가 있습니다.datefield에서 datetimefield 로의 데이터 마이그레이션

필드가 date = DateField()인데 그 데이터를 저장하지 않고 d ate = DateTimeField()으로 변경하고 싶습니다.

내가 무슨 짓을 :

  • 다음 date = DateField()
  • date
  • temp에서 date = DateTimeField()
  • 전송 저장된 값을 추가, 제거 datamigration
  • 에 의해 임시로 date = DateField()에서 값을 전송 일시 필드 temp = DatetimeField() 추가

모든 것이 훌륭했지만 오류는 없었습니다. 하지만 한 가지 변한 것은 the value입니다. 예를 들어

:

오래된 데이터 : datetime.date(2014, 5, 5)

새로운 데이터 : datetime.datetime(2014, 5, 4, 12, 0, tzinfo=UTC)

그래서 제 질문은 변경하고 원래 값에서 deduct 1일 않은 이유, 무엇입니까? 이견있는 사람? 시간대 때문인가? 시간대가 Pacific/Auckland

으로 설정되었습니다. 도움을 많이 주시면 감사하겠습니다. 감사!

답변

1

태평양/오클랜드의 GMT 오프셋은 UTC + 12 (시간)입니다.

datetime.datetime(2014, 5, 4, 12, 0, tzinfo=UTC)은 정오 UTC 의 4 번째을 나타냅니다. 그러나 그 결과로, 이것은 오클랜드에서 한밤중입니다. 그러나 오클랜드에서 한밤중은 사실 "시간 0"의 5 번째에 있습니다.

그래,이 문제는 시간대와 관련이 있지만 실제로는 문제가 아닙니다. 날짜는 변경되지 않았으며 다른 시간대로 표시되었습니다.


당연히, 당신은 마이그레이션을 롤백 할 수, 당신은 당신이 datetimedate 변환 다르게 1 단계에서 시간대를 차지하고있다.

+0

감사합니다. 원래 날짜 값을 잃지 않기 위해 수행해야 할 제안이나 조치는 무엇입니까? –

관련 문제