2011-12-07 3 views
0

저는 Brownfield 응용 프로그램에서 사용자 별 시간대를 구현하는 솔루션을 제안했습니다. 데이터베이스에 저장된 모든 단일 날짜는 서버의 로컬 시간에 저장됩니다. 이 날짜와 함께 저장된 시간대 나 오프셋 정보는 없습니다.brownfield 응용 프로그램을 사용자 기반 표준 시간대로 변환하는 방법은 무엇입니까?

이것은 매우 큰 응용 프로그램이므로 많은 작업이 될 것입니다. 내 우려는 우리가 가능한 한 적은 위험으로이 작업을 수행한다는 것입니다. 누구든지 전에 이것을 했습니까? 그렇다면 최상의 접근 방식은 무엇이며 피해야 할 함정은 무엇입니까?

현재의 생각은 의미있는 시간 구성 요소가있는 날짜 열의 모든 데이터를 UTC로 변환한다는 것입니다. 그런 다음 프레젠테이션 계층에서 우리는 datetime 객체를 UTC에서 사용자에게 표시해야 할 때 사용자의 시간대로 변환하는 함수를 실행해야합니다.

SQL Server 2008 데이터베이스가있는 ASP .NET 응용 프로그램입니다. 필자는 이러한 기술에 유용한 도구가있을 수 있기 때문에이 점을 언급합니다. 그 도구는 우리가 일을 원활하게하는 데 사용할 수 있다는 것을 모릅니다.

답변

1

이 새로운 코드의 요구 사항은 T-SQL의 새로운 datetimeoffset 데이터 형식에 거의 적합합니다. 그러나 레거시 코드에서는 몇 가지 문제가 발생할 것입니다.

새로운 datetimeoffset 유형에 The Death of DateTime?이라는 좋은 기사가 있는데, datetime의 문제를 아주 잘 살펴 봅니다.

  • 제외 할 수있는 필드 만 (즉, 시간이 항상 0시해야합니다) 날짜 : 짧은에서

    여기에 당신이 해결해야 할 문제입니다. 시간대는 날짜 시간이 기록 된 어떤

  • 시간대는 별도의 일광 절약 또는 여름 시간이
  • 어떻게
  • 당신이 날짜 기록 된 모든 년 동안 일광 절약의 정확한 날짜 범위 무엇입니까 오프셋이
  • 당신이 데이터를 분할 가지고 있고, fo를 오프셋 밖으로 일한 후에는 데이터의 각 날짜 오프셋 값으로 해결할 수
  • 당신이 오프셋 (offset) 시간을 중복 해석 할 것인가

변경 R 각 그룹은 그냥 전화 :

TODATETIMEOFFSET (expression , time_zone) 

당신은 DATETIMEOFFSET을 읽을 때 당신은 이전과 로컬 타임을 취득 플러스가 기록 될 때 UTC로부터의 오프셋 (offset).

언젠가 작년의 원격으로 기록 된 날짜 시간을 로컬 시간으로 변환해야하는 경우 시간이 기록되었을 때 로컬 오프셋이 무엇인지 알아야합니다.

관련 문제