2008-09-23 4 views
8

데이터베이스는 예를 들어. 캘리포니아. 내 사용자 표는 모든 사용자의 시간대를가집니다. 예 : -0700 UTC날짜/시간대 조정

예를 들어 거주하는 사용자에게 날짜를 표시 할 때마다 데이터베이스 서버에서 시간을 조정할 수 있습니까? 뉴욕? UTC/GMT -4 시간

답변

4

데이터를 UTC 형식으로 저장하고 현지 표준 시간대 형식으로 표시해야합니다.

DateTime.ToUniversalTime() -> server; 
DateTime.ToLocalTime() -> client 

AddXXX 메소드 그룹을 사용하여 날짜/시간을 조정할 수 있지만 오류가 발생할 수 있습니다. .NET은 System.TimeZoneInfo 클래스의 시간대를 지원합니다.

0

.NET 3.5 (VS 2008)까지 .NET에는 UTC 로의 변환과 별도로 시간대에 대한 기본 제공 지원이 없습니다. 시간 차이는 항상 정확히 3시간 일년 내내 (여름과 겨울) 인 경우

, 단순히 yourDate.AddHours(3) 하나의 방법을 변경하는 데 사용하고, yourDate.AddHours(-3) 그것을 다시 변경할 수 있습니다. 이 3 시간을 더하거나/빼는 이유를 설명하는 함수로 이것을 분해하십시오.

0

당신은 오프셋 차이에 따라 데이터베이스에서 시간을 상쇄하기 위해 TimeZoneInfo.BaseUtcOffset 속성을 사용하여 다음 TimeZoneInfo.GetSystemTimeZones의 조합()를 사용 할 수

정보 System.TimeZoneInfo here

0

당신에게 이 질문은 좋은 질문입니다. 올해 처음으로 DB 응용 프로그램을 작성했으며 시간과 관련된 입력 데이터가 Int64 값이므로 DB에 저장했습니다. 내 클라이언트 응용 프로그램은이 값을 검색하여 DateTime.FromUTC() 또는 FromFileTimeUTC()를 수행하고 .LocalTime()을 사용하여 로컬 시간으로 항목을 표시합니다. 나는 그것이 좋았던/나쁘거나/끔찍한 것이 었는지 궁금해했다. 그러나 그것은 나의 필요를 위해 지금까지 충분히 잘 일했다. 물론이 작업은 내가 작성한 데이터 액세스 레이어 라이브러리에 의해 완료되고 DB 자체에서는 수행되지 않습니다.

잘 작동하는 것 같지만, 이런 종류의 일에 더 많은 경험을 가진 사람들이 이것이 최선의 방법이 아닌 곳을 지적 할 수 있습니다.

행운을 빌어 요!

2

.Net을 사용하는 경우 TimeZoneInfo을 사용할 수 있습니다. 질문에 'C#'이라는 태그가 붙어 있기 때문에, 나는 그럴 것이라고 생각할 것입니다.

첫 번째 단계는 변환하려는 시간대가 TimeZoneInfo입니다. 귀하의 예에서는 NY의 시간대입니다. 여기 당신이 그것을 할 수있는 방법이있다 :

//This will get EST time zone 
TimeZoneInfo clientTimeZone 
    = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 

//This will get the local time zone, might be useful 
// if your application is a fat client 
TimeZoneInfo clientTimeZone = TimeZoneInfo.Local; 

를 그리고, 당신이 당신의 DB에서 DateTime를 읽은 후, 당신은 Kind가 올바르게 설정되어 있는지 확인해야합니다.DB를에서의이 UTC에있는 DateTime '를 가정하면 (그런데, 그 일반적으로 권장), 당신이 이런 식으로 변환 할 준비를 할 수 있습니다

DateTime aDateTime = dataBaseSource.ReadADateTime(); 
DateTime utcDateTime = DateTime.SpecifyKind(aDateTime, DateTimeKind.Utc); 

마지막 순서로 다른 시간대로 변환, 간단하게이 작업을 수행 :

DateTime clientTime = TimeZoneInfo.ConvertTime(utcDateTime, clientTimeZone); 

일부 여분의 말 : 당신은 몇 가지 특정 시간대에만 관심이있는 경우

  • TimeZoneInfo는, 정적 필드에 저장 될 수 있습니다;
  • TimeZoneInfo 일광 절약 시간제에 대한 정보를 저장합니다. 따라서 걱정할 필요가 없습니다.
  • 응용 프로그램이 웹 인 경우 클라이언트가있는 시간대를 찾는 것이 어려울 수 있습니다. 여기에 한 가지 방법이 설명되어 있습니다. http://kohari.org/2009/06/15/automagic-time-localization/

이 정보가 도움이되기를 바랍니다. :)

+0

답변으로 받아 들여야합니다. –

관련 문제