DateTime本地化.任何标准/最佳实践

本文关键字:最佳 标准 本地化 任何 DateTime | 更新日期: 2023-09-27 18:10:32

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

这是为了缓解时区问题。

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

当获得请求时,我可以使用modelbinder (Asp. js)。净MVC)。但是,在呈现响应时,我应该拦截什么来修改DateTime类型呢?

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

DateTime本地化.任何标准/最佳实践

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

这样,在您的基本控制器上,您可以覆盖已执行的操作并在线程上设置用户区域性。比如:
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和你自己的格式,在线程

中传递区域性

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

根据您的情况,您可能希望使用标准的IANA/Olson时区数据库而不是Microsoft Windows数据库。