从昨天开始,我一直在寻找答案,但无济于事。我尝试过模型活页夹、布局模板(不适用于我的案例)等。
让我澄清一下我真正需要什么。
我在 SQL Server 2008 R2 数据库中的许多表上有许多 DateTime 字段。它们存储在伦敦时区。我已经设法(在你们的帮助下)将 DateTime 转换为用户的时区并正确显示它们。我现在需要的是一种自动化的方法。每次站点显示来自数据库的 DateTime 时,都需要预先进行转换。输入将保持原样。
如果它是关于 WebForms 开发的——我已经习惯了——我只会创建一个处理程序。但我不知道 MVC 3 Razor 的最佳实践是什么。
有人可以在这里给我一些指示吗?
提前致谢。
互补
这是转换 DateTime 的代码:
// Timezone data provider
IDateTimeZoneProvider timeZoneProvider = DateTimeZoneProviders.Tzdb;
// Database Timezone = London
var londonTimeZone = timeZoneProvider["Europe/London"];
//// Getting date/time from the database and mapping it as being local to London timezone
//var yourDateFromDb = new DateTime(source.Year, source.Month, source.Day, source.Hour, source.Minute, source.Second, source.Millisecond);
//ZoneLocalMapping map = londonTimeZone.MapLocal(LocalDateTime.FromDateTime(yourDateFromDb));
//// This is the date/time with the correct offset (taking into account DST etc)
//var zonedDbDateTime = map.First();
// Jon Skeet suggestion instead of using the Mapping
// http://stackoverflow.com/questions/16164994/datetime-conversions-using-nodatime-on-asp-net-mvc-3-razor-website-how-to/16178730?noredirect=1#16178730
//
var dateTimeFromDb = new DateTime(source.Year, source.Month, source.Day, source.Hour, source.Minute, source.Second, source.Millisecond);
var zonedDbDateTime = londonTimeZone.AtLeniently(LocalDateTime.FromDateTime(dateTimeFromDb));
// Map the London zoned date/time to the users local date/time (saved on the Session)
var usersTimezoneId = (HttpContext.Current.Session["timezoneid"] != null ? HttpContext.Current.Session["timezoneid"].ToString() : "UTC");
var usersTimezone = timeZoneProvider[usersTimezoneId];
var usersZonedDateTime = zonedDbDateTime.WithZone(usersTimezone);
return usersZonedDateTime.ToDateTimeUnspecified();