gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:31 25 4
gpt4 key购买 nike

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

目标(如果可能):

  1. 将用户的本地日期时间转换为 UTC 日期,以便在 Controller 和数据库上使用
  2. 在所有 ViewModels/JsonResults 中,将 UTC 转换为用户本地 DateTime 并针对他们的文化设置格式,以便在 View 中使用以及在第三方控件的 JSON 提要中使用

我们系统中的用户都有帐户,并且他们专门设置了时区和文化设置,因此我将始终可以访问这些元素。

本地 -> UTC(已解决)

对于 1. 我有一个自定义模型绑定(bind)器,它采用用户本地时间并将时间转换为 UTC,这按预期工作。

UTC -> 本地

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

是否可以使用类似 ActionFilter 的通用方法来执行此操作?如果我能在一个地方找到一种方法来执行此操作,并且格式化 DateTimes 以便在我的 View 和 JSON 结果中使用,那就太好了。

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

最佳答案

几点:

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

    例如,您的一个 Controller 可能由管理用户使用,他可能会看到以用户时区而不是他们自己的时区显示的值。

    或者您的其中一个屏幕可以安排 future 的事件。在这些情况下,以 UTC 存储或转换为用户的时区是有意义的 - 但将数据保留在事件的原始时区。

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

  • 您可以考虑在模型和 Controller 中使用 DateTimeOffset 而不是 DateTime。在理解不同值之间以及与 UTC 之间的关系时,这将使事情变得更容易一些。偏移量可以保留,但 DateTimeKind 被隐藏起来并且经常丢失。另见 DateTime vs DateTimeOffset .

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

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

关于c# - ASP MVC - 使用时区和文化处理日期时间本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25550607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com