user datetime setting as GMT, how to convert date to their localized setting?
在我的用户设置中,我有一个下拉列表,其中包含用户可以选择的所有GMT日期。
在c#中,如何将存储在数据库中的日期时间转换为GMT时间?
存储在数据库中的时间是服务器时间。
对于.NET 3.5+,您可以将用户存储系统时区标识符(可以从
1 2 3 4 5 6 | // 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中,您仅限于较旧的
1 2 3 4 5 6 7 8 | // 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等?
1 2 3 4 5 6 7 8 | // 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); |
使用System.DateTimeOffset而不是DateTime。 IT包括您需要的所有功能。