사용자 datetime 설정 GMT로서, 날짜를 현지화 된 설정으로 변환하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1637144

  •  06-07-2019
  •  | 
  •  

문제

사용자 설정에서 사용자가 선택할 수 있도록 모든 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을 사용하십시오. 필요한 모든 기능이 포함되어 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top