2015-01-08 6 views
0

나는 SQL을 사용하여 회의/이벤트를 만듭니다. 회의를 UTC로 저장 한 다음 회의를보고있는 시간대를 기준으로 최종 사용자에게 표시해야합니다.SQL 처리 날짜/시간 (UTC)

최종 사용자가 회의 시간을 선택하므로이 시간을 다음으로 변환해야합니다. UTC. 거기에서 로컬 사용자의 오프셋을 전달하고 로컬 시간으로 변환합니다.

-- Declare the local offset 
DECLARE @offset INT = '420' 

-- Convert a date/time to UTC 
SELECT DATEADD(hh, DateDiff(hh, GetDate(), GetUTCDate()), '2015-01-08 17:45:00') AS ConvertedToUTC; 

-- Convert a UTC back to local based on offset 
SELECT DATEADD(minute, @offset, '2015-01-08 23:45:00.000') AS ConvertedToLocal 

convertedUTC = 2015년 1월 8일 23 : 45 : 00.000

convertedLocal = 여기

나는 결과가 정확하지 않은 것처럼 잘못 내가 추측하고있는 한 일이다 2015-01-09 06 : 45 : 00.000

예 : Bob은 2015 년 1 월 8 일 오후 1시에 회의를 만들고 애리조나에 있습니다. 그 시간을 UTC로 변환해야합니다. Jim이 오마하에서오고 회의 목록을 볼 때, 그의 오프셋을 기준으로 조정 된 시간을 보여줍니다.

올바르게 처리하는 방법에 대한 팁은 무엇입니까?

+0

SQL의 DATETIMEOFFSET 데이터 유형을 살펴 보는 것이 좋습니다. – David

답변

0

아니라 데이터 액세스 코드에서이를 처리 할 것입니다 나의 추천 데이터베이스 자체보다 UTC로 시간을 저장하는 것이 맞지만 사용자 로케일에서 시간을 표시하는 응용 프로그램 계층이어야합니다. 데이터베이스에서이 작업을 반드시 수행해야하는 경우 DATEADD 대신 변환 함수를 사용하여 날짜를 올바른 시간대로 표시하는 대신 조작하십시오. DB를 사용하고 있다고 언급하지 않았지만, 예를 들어 MySQL은 CONVERT_TZ() 함수를 사용하여 주어진 시간대의 날짜를 보여줍니다.

+0

감사합니다. SQL Server 2012를 사용하고 있습니다. UTC에서 오프셋을 주어진 시간을 로컬로 변환 할 수있는 방법을 알고 있습니까? – SBB

+0

SQL Server에서 SWITCHOFFSET() 함수를 사용합니다. – xtrakBandit