programing

Date Time(UTC) 저장과 Date Time Offset 저장

fastcode 2023. 4. 15. 09:31
반응형

Date Time(UTC) 저장과 Date Time Offset 저장

데이터베이스 읽기/쓰기 직전에 DateTime 변환(UTC에서 현지시간으로, 현지시간에서 UTC로)을 실행하는 "interceptor"를 사용하는 것이 일반적입니다.DateTime.Now(추정 및 비교) 시간대를 걱정하지 않고 시스템 전체에 걸쳐 실행할 수 있습니다.

컴퓨터간의 시리얼라이제이션이나 데이터 이동에 대해서는, 항상 UTC 로 되어 있기 때문에, 번거롭게 할 필요는 없습니다.

날짜(SQL 2008 - datetime)를 UTC 형식으로 계속 저장해야 합니까?아니면 다음을 사용하여 저장해야 합니까?DateTimeOffset(SQL 2008 - datetime offset)

데이터베이스의 UTC 날짜(datetime type)는 오랫동안 기능하고 있으며 이미 알고 있습니다.왜 변경하시겠습니까?어떤 장점이 있습니까?

이런 기사는 이미 알아봤지만 100% 확신은 못 합니다.무슨 생각 있어?

UTC만 사용할 수 없다는 점에서 큰 차이가 있습니다.

  • 이런 시나리오가 있으면

    • 1대의 서버와 복수의 클라이언트(모두 지리적으로 다른 시간대)
    • 클라이언트가 날짜/시간 정보를 사용하여 일부 데이터 생성
    • 클라이언트는 모든 것을 중앙 서버에 저장
  • 그 후, 다음과 같이 입력합니다.

    • datetimeoffset은 클라이언트의 로컬 시간을 저장하고 UTC 시간으로 오프셋합니다.
    • 모든 클라이언트는 모든 데이터의 UTC 시간 및 정보가 생성된 장소의 현지 시간을 알고 있습니다.
  • 단,

    • UTC datetime은 UTC datetime만 저장하므로 데이터가 생성된 클라이언트 위치의 현지 시간에 대한 정보는 없습니다.
    • 다른 클라이언트는 플레이스의 로컬 시간을 알 수 없습니다. 즉, 날짜/시간 정보의 출처입니다.
    • 다른 클라이언트는 데이터가 생성된 클라이언트의 현지 시간이 아닌 데이터베이스(UTC 시간 사용)에서만 현지 시간을 계산할 수 있습니다.

간단한 예로는 항공권 예약 시스템...항공권은 두 번으로 구성되어야 합니다: - "이륙" 시간 ("출발" 도시의 시간대) - "착륙" 시간 ("도착" 도시의 시간대)

모든 기록 시간(즉, 기록된 이벤트)에 대해 UTC를 사용하는 것은 전적으로 옳습니다.UTC에서 현지 시간으로 이동하는 것은 항상 가능하지만 항상 그 반대인 것은 아닙니다.

현지 시간은 언제 사용합니까?다음 질문에 답하십시오.

정부가 갑자기 여름 시간제를 바꾸기로 결정한 경우, 이 데이터를 함께 변경하시겠습니까?

대답이 "예"인 경우에만 현지 시간을 저장하십시오.분명히 그것은 미래의 데이트만을 위한 것이며, 보통 어떤 식으로든 사람들에게 영향을 미치는 데이트만을 위한 것이다.

시간대/오프셋을 저장하는 이유

우선, 액션을 실행한 유저의 오프셋을 기록하는 경우는, 그 유저의 장소와 타임 존을 로그인으로 기록하는 것이 가장 좋습니다.

두 번째로 표시용으로 변환하려면 해당 시간대의 모든 로컬 시간 오프셋 전환 테이블을 만들어야 합니다. 6개월 전과 날짜/시간을 표시하는 경우 오프셋이 다르기 때문에 현재 오프셋으로는 충분하지 않습니다.

DATETIMEOFSET을 사용하면 로컬 시간과 UTC 시간을 하나의 필드에 저장할 수 있습니다.

이것에 의해, 로컬 또는 UTC 의 시각으로 매우 심플하고 효율적인 리포팅이 가능하게 됩니다.표시용으로 데이터를 처리할 필요는 없습니다.

가장 일반적인 요건은 로컬보고서의 현지시간과 그룹보고서의 UTC시간입니다.

로컬 시간은 DATETIMEOFFSET의 DATETIME 부분에 저장되며 UTC로부터의 OFFSET은 OFFSET 부분에 저장되므로 변환이 간단하며 데이터가 전송된 시간대를 알 필요가 없으므로 데이터베이스 레벨에서 모두 수행할 수 있습니다.

예를 들어 몇 분 또는 몇 초로 시간을 줄일 필요가 없는 경우 DATETIMEOFSET(0)을 사용할 수 있습니다.그러면 DATETIMEOFSET 필드에는 DATETIME과 같은 8바이트의 저장 공간만 필요합니다.

따라서 UTC DATETIME이 아닌 DATETIME OFFSET을 사용하면 보고서 작성 시 유연성, 효율성 및 단순성이 향상됩니다.

언급URL : https://stackoverflow.com/questions/4715620/storing-datetime-utc-vs-storing-datetimeoffset

반응형