Asp.net 日期时间文化问题

Posted

技术标签:

【中文标题】Asp.net 日期时间文化问题【英文标题】:Asp.net datetime culture issue 【发布时间】:2014-01-21 12:31:54 【问题描述】:

我在 asp.net 中使用 datetime 时遇到了一个问题。根据土耳其文化将日期时间字符串从文本框发送到 DateTime 时,datetime 格式被破坏。

例如;我在查询字符串上发送这些参数 -

?beginDate=02.01.2014&endDate=03.01.2014,这些参数值在传递ActionResult参数时如下所示-

beginDate = 01.02.2014, endDate = 03.01.2014.

我尝试了几个解决方案,但问题仍然存在。

1)

protected void Application_Start()

    System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("tr-TR");
    System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("tr-TR");

2)

<globalization uiCulture="tr-TR" culture="tr-TR" />

3)

return Json(_db.GetList(Convert.ToDateTime(begin, new CultureInfo("tr-TR")), Convert.ToDateTime(end, new CultureInfo("tr-TR")))

4)

begin.Value.ToString("dd.mm.yyyy")
end.Value.ToString("dd.mm.yyyy")

网址

domain.com/Home/GetList?begin=02.01.2014&end=03.01.2014

GetList 方法

public JsonResult GetList(DateTime? begin, DateTime? end)

    return Json(_db.GetList(Convert.ToDateTime(begin, new CultureInfo("tr-TR")), Convert.ToDateTime(end, new CultureInfo("tr-TR")))

【问题讨论】:

请显示您将这些查询字符串参数转换回日期时间的代码。 查询字符串参数直接绑定 【参考方案1】:

对于 GET 参数,默认模型绑定器是 文化不可知论。这意味着当您将日期作为查询字符串参数发送到控制器操作时,您应该始终使用yyyy-MM-dd 以下格式:

?beginDate=2014-01-02&endDate=2014-01-03

如果您在 POST 请求的负载中发送这些日期,文化就会发挥作用。

这个实现细节背后是有原因的。您可以在以下文章中了解更多信息:http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx

这就是说,您可以摆脱所有尝试过的 1.、2.、3.、4.、5. 点,只需使用 beginend DateTime 参数。您无需设置应用程序的文化信息。

【讨论】:

以上是关于Asp.net 日期时间文化问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.Net Core 中为日期绑定设置文化?

如何在asp.net core razor pages 2.2中设置日期格式和文化

Javascript中的文化特定日期时间

ASP.NET Core 应用程序上的错误日期时间格式

ASP.Net MVC3 通过或不通过 Visual Studio 修改日期和小数的区域性?

如何改变文化?