日期时间本地化。任何标准/最佳实践

时间:2013-04-24 06:39:07

标签: c# asp.net-mvc datetime localization timezone

我唯一知道的是,DateTime应始终以UTC格式存储,但在显示或获取输入时,必须记录用户的本地时间。

这是为了缓解时区问题。

任何标准/最佳做法,我必须触及已经开发的代码库的最小部分?

在收到请求时,我可以使用ModelBinders(Asp.Net MVC)。但是,在渲染响应的同时,我应该拦截什么来修改DateTime类型?

任何帮助将不胜感激....

2 个答案:

答案 0 :(得分:1)

如果您的系统有用户,最好是针对这些用户设置文化代码。

这样,在您的基本控制器上,您可以覆盖已执行的操作并在线程上设置用户的文化。类似的东西:

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
        if (currentUser != null) //user your user object
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo(currentUser.Culture);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(currentUser.Culture);
        }
        else
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
        }
}

然后,只要您使用DateTime个对象,就可以使用ToShortDateString

string localistedDate = yourDate.ToShortDateString();

或者,如果您不想使用短格式,可以使用自己格式的ToString,在线程中传递文化

答案 1 :(得分:1)

由于您要存储UTC时间,因此您还需要使用TimeZoneInfo类或NodaTime将其转换为用户时区,具体取决于您拥有的时区信息。

根据您的方案,您可能希望使用标准的IANA / Olson时区数据库而不是Microsoft Windows数据库。有关详细信息,请参阅the TimeZone tag wiki