【问题标题】:DateTime Globalization in ASP.NET MVC and SQL SERVERASP.NET MVC 和 SQL SERVER 中的日期时间全球化
【发布时间】:2015-05-23 06:11:13
【问题描述】:

在我的 ASP.NET MVC 应用程序中,ModelState 始终无效,并显示以下错误消息:"The value '5/23/2015 7:29:37 AM' is not valid for Register Date."

我正在尝试针对波斯文化本地化我的应用程序,因此我在web.config 中将uiCultureculture 设置为fa-IR。不过,DateTime.Now 不会返回本地化日期。

全球化DateTime的正确方法是什么?我应该在数据库中存储本地化日期吗?还是本地化版本仅用于查看?

看来我应该在数据库中存储本地化版本,我怎样才能获得波斯文化?

更新:

看来我无法直接获取当前的波斯日期,我必须按照MSDN 中的说明进行转换:

您不能将 PersianCalendar 对象用作文化的默认日历。默认日历由 CultureInfo.Calendar 属性指定,并且必须是 CultureInfo.OptionalCalendars 属性返回的日历之一。目前,PersianCalendar 类不是 CultureInfo 类支持的任何文化的可选日历,因此不能是默认日历。

但我怎么知道是哪个组件添加了错误消息以及如何修复它?

【问题讨论】:

  • 在数据库中存储UTC是最好的方法..然后你可以在应用程序代码中做转换逻辑
  • 那么,为什么我的 ModelState 总是因为 DateTime 而无效?
  • 您是否使用 jquery datepicker 插件来选择日期,如果是,您是否使用过jquery.globalize.js
  • 目前,我在控制器中使用DateTime.Now 插入当前时间。因此,用户不输入日期。但我的应用程序使用剑道。这将是下一个痛苦的步骤,拥有一个全球化的日期选择器。
  • 如果用户没有在您的模型上输入日期,为什么不更改您的模型以使用可为空的日期时间DateTime?。你试过了吗?错误还存在吗?

标签: c# .net sql-server asp.net-mvc


【解决方案1】:

我建议您在客户端本地化您的日期,而不是在服务器或数据库端。这样,您就永远不受特定文化的束缚。例如,您的日期可以这样表示:“2015-05-23T7:29:37Z”。

我还建议您以 UTC 格式保存并发送您的日期时间。

【讨论】:

  • 谢谢,但为什么我的 ModelState 总是因为日期时间而无效?我以为我应该将它存储在数据库中。我如何知道是哪个组件添加了特定的错误消息?
猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2011-06-07
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多