데이터베이스는 예를 들어. 캘리포니아. 내 사용자 표는 모든 사용자의 시간대를가집니다. 예 : -0700 UTC날짜/시간대 조정
예를 들어 거주하는 사용자에게 날짜를 표시 할 때마다 데이터베이스 서버에서 시간을 조정할 수 있습니까? 뉴욕? UTC/GMT -4 시간
데이터베이스는 예를 들어. 캘리포니아. 내 사용자 표는 모든 사용자의 시간대를가집니다. 예 : -0700 UTC날짜/시간대 조정
예를 들어 거주하는 사용자에게 날짜를 표시 할 때마다 데이터베이스 서버에서 시간을 조정할 수 있습니까? 뉴욕? UTC/GMT -4 시간
데이터를 UTC 형식으로 저장하고 현지 표준 시간대 형식으로 표시해야합니다.
DateTime.ToUniversalTime() -> server;
DateTime.ToLocalTime() -> client
AddXXX 메소드 그룹을 사용하여 날짜/시간을 조정할 수 있지만 오류가 발생할 수 있습니다. .NET은 System.TimeZoneInfo 클래스의 시간대를 지원합니다.
.NET 3.5 (VS 2008)까지 .NET에는 UTC 로의 변환과 별도로 시간대에 대한 기본 제공 지원이 없습니다. 시간 차이는 항상 정확히 3시간 일년 내내 (여름과 겨울) 인 경우
, 단순히 yourDate.AddHours(3)
하나의 방법을 변경하는 데 사용하고, yourDate.AddHours(-3)
그것을 다시 변경할 수 있습니다. 이 3 시간을 더하거나/빼는 이유를 설명하는 함수로 이것을 분해하십시오.
당신은 오프셋 차이에 따라 데이터베이스에서 시간을 상쇄하기 위해 TimeZoneInfo.BaseUtcOffset 속성을 사용하여 다음 TimeZoneInfo.GetSystemTimeZones의 조합()를 사용 할 수
정보 System.TimeZoneInfo here에
당신에게 이 질문은 좋은 질문입니다. 올해 처음으로 DB 응용 프로그램을 작성했으며 시간과 관련된 입력 데이터가 Int64 값이므로 DB에 저장했습니다. 내 클라이언트 응용 프로그램은이 값을 검색하여 DateTime.FromUTC() 또는 FromFileTimeUTC()를 수행하고 .LocalTime()을 사용하여 로컬 시간으로 항목을 표시합니다. 나는 그것이 좋았던/나쁘거나/끔찍한 것이 었는지 궁금해했다. 그러나 그것은 나의 필요를 위해 지금까지 충분히 잘 일했다. 물론이 작업은 내가 작성한 데이터 액세스 레이어 라이브러리에 의해 완료되고 DB 자체에서는 수행되지 않습니다.
잘 작동하는 것 같지만, 이런 종류의 일에 더 많은 경험을 가진 사람들이 이것이 최선의 방법이 아닌 곳을 지적 할 수 있습니다.
행운을 빌어 요!
.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
일광 절약 시간제에 대한 정보를 저장합니다. 따라서 걱정할 필요가 없습니다.이 정보가 도움이되기를 바랍니다. :)
답변으로 받아 들여야합니다. –