사용자 datetime 설정 GMT로서, 날짜를 현지화 된 설정으로 변환하는 방법은 무엇입니까?
문제
사용자 설정에서 사용자가 선택할 수 있도록 모든 GMT 날짜와 드롭 다운이 있습니다.
C#에서 데이터베이스에 저장된 데이터를 GMT 시간으로 어떻게 변환합니까?
데이터베이스에 저장된 시간은 서버 시간입니다.
해결책
.NET 3.5+의 경우 시스템 시간대 식별자를 사용자에게 저장할 수 있습니다 ( TimeZoneInfo.GetSystemTimeZones
) 및 사용 TimeZoneInfo
시간대를 변환하려면 :
// In a User class that has a string timeZoneId field (for example)
public DateTime GetLocalDateTime(DateTime originalDate) {
DateTime utcDate = TimeZoneInfo.Local.ConvertToUtc(originalDate);
TimeZone userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(this.timeZoneId);
return TimeZone.ConvertTime(utcDate, userTimeZone);
}
.NET 2.0에서는 구형으로 제한됩니다 TimeZone
로컬 시스템에만 사용할 수있는 클래스. 사용자에 대한 일광 절약 정보를 자동으로 얻지 못하므로 기본 GMT/UTC 오프셋과 함께 직접 저장해야합니다.
// In a User class that has a double utcOffset field (for example)
public DateTime GetLocalDateTime(DateTime originalDate) {
DateTime utcDate = TimeZone.CurrentTimeZone.ToUniversalTime(originalDate);
return utcDate.AddHours(this.utcOffset);
}
// Usage
DateTime localDate = user.GetLocalDateTime(DateTime.Now);
다른 팁
각 사용자의 GMT 차이를 저장하고 있습니까? 즉 0 또는 +1 또는 -6 등?
// Get your DateTime to convert
DateTime databaseDateTime = DateTime.Now;
double userGmtOffset = 1;
// Get the GMT time of the database time
int hoursOffset = TimeZone.CurrentTimeZone.GetUtcOffset(databaseDateTime).Hours;
DateTime gmtDateTime = databaseDateTime.AddHours((double)(0 - hoursOffset));
DateTime userDateTime = gmtDateTime.AddHours(userGmtOffset);
DateTime 대신 System.DatetimeOffset을 사용하십시오. 필요한 모든 기능이 포함되어 있습니다.
제휴하지 않습니다 StackOverflow