ASP MVC - 使用时区和文化处理DateTime本地化

时间:2014-08-28 13:54:45

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

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

目标(如果可能):

  1. 将用户本地DateTime转换为UTC日期,以便在控制器和数据库
  2. 上使用
  3. 在所有ViewModels / JsonResults中,将UTC转换为用户的本地DateTime及其文化格式,以便在视图中使用,并在第三方控件的JSON Feed中使用
  4. 我们系统中的用户都拥有帐户,并且他们专门设置了他们的时区和文化设置,因此我将始终可以访问这些元素。

    本地 - > UTC(已解决)

    For 1.我有一个自定义模型绑定器,它将用户本地时间转换为UTC,并将其转换为预期的。

    UTC - >本地

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

    我可以使用类似ActionFilter的方式执行此操作吗?如果我能找到一种方法在一个可以格式化DateTimes以便在我的Views和JSON结果中使用的方法,那就太棒了。

    我知道我可以将其拆分出来,并在显示/编辑器模板中执行此操作,但我遇到的问题是在第三方控件的JSON Feed中返回UTC日期。

1 个答案:

答案 0 :(得分:1)

几点:

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

    例如,管理员可能会使用其中一个控制器,他们可能会在用户的时区中看到一个值而不是他们自己的值。

    或者您的某个屏幕可能会调度未来事件。在这些情况下,将存储在UTC中或转换为用户的时区是有意义的 - 但要将数据保留在事件的原始时区中。

    < / LI>
  • 在我的MVC应用程序中,我更喜欢在控制器和/或模型中完全控制它。如果我想要一个转换为特定时区的值,我会在返回之前操纵控制器中的模型属性。

  • 您可以考虑在模型和控制器中使用DateTimeOffset代替DateTime。当理解不同的值如何相互关联以及与UTC相关时,这将使事情变得更容易。可以保留偏移量,但DateTimeKind被隐藏起来并经常丢失。另请参阅DateTime vs DateTimeOffset

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

  • 文化真的只对您要为用户进行格式化的常规视图很重要。 JSON响应应该(最好)是ISO8601格式,包括偏移量。它应该使用InvariantCulture