ASP MVC-使用时区和文化处理日期时间本地化



我目前正在考虑实现DateTime本地化的方法,同时考虑用户时区和用户文化,以决定MVC4应用程序的本地时间和日期格式。

目标(如果可能):

  1. 将用户的本地DateTime转换为UTC日期,以便在控制器和数据库上使用
  2. 在所有ViewModels/JsonResults中,将UTC转换为用户本地DateTime及其区域性的格式,以便在视图中使用,并在第三方控件的JSON提要中使用

我们系统中的用户都有帐户,他们专门设置了时区和文化设置,所以我永远可以访问这些元素。

本地->UTC(已解决)

对于1。我有一个自定义模型绑定器,它为用户提供本地时间并将时间转换为UTC,工作正常。

UTC->本地

对于2。我不确定解决这个问题的最佳方法是什么。我真的想截取所有DateTime属性,并在将值返回到View或作为JSON对象返回之前,将值从UTC格式化为用户本地时间/区域性。

有没有一种通用的方法可以使用ActionFilter之类的东西来实现这一点?如果我能在一个地方找到一种方法来实现这一点,那就太好了,它可以格式化DateTimes,以便在我的视图和JSON结果中使用。

我知道我可以将其拆分,并在Display/Editor模板中执行,但我遇到的问题是,UTC日期在第三方控件的JSON提要中返回。

几点:

  • 是的,您可以使用操作过滤器,但这将假设应用程序中的所有都需要以相同的方式工作。情况可能并非总是如此。

    例如,您的某个控制器可能由管理用户使用,该用户可能会看到用户时区中显示的值,而不是他们自己的值。

    或者,你的一个屏幕可以安排未来的活动。在这些情况下,存储在UTC或转换到用户的时区是有意义的,而不是,而是将数据保留在事件的原始时区。

  • 在我的MVC应用程序中,我更喜欢在控制器和/或模型中对此进行完全控制。如果我想把一个值转换成一个特定的时区,我会在返回之前在控制器中操作模型的属性

  • 您可以考虑在模型和控制器中使用DateTimeOffset而不是DateTime。这将使理解不同值之间以及与UTC之间的关系变得更加容易。偏移可以持久化,但DateTimeKind是隐藏的,并且经常丢失。另请参阅DateTime与DateTimeOffset。

  • 如果存储在SQL Server等数据库中,也可以在那里使用datetimeoffset。有时这是有意义的,有时存储datetimedatetime2仍然有意义。考虑你的选择,选择适合你的。

  • 文化性实际上只对常规视图很重要,在常规视图中,您将为用户设置格式。JSON响应应该(最好)是ISO8601格式的,包括偏移量。它应该使用InvariantCulture

相关内容

  • 没有找到相关文章

最新更新