ASP.NET C#MVC - 直接在DB或Model上更改datetime的格式

时间:2009-09-13 11:26:32

标签: c# asp.net-mvc datetime

我正在努力寻找一种简单的方法来改变我的Table字段的DateTime格式。

我有一个名为Article的模型,其中包含一个名为releaseDate的字段,它是一个DateTime

我设法通过转换

来实现(视觉上)
Article.releaseDate.ToString("dd/MM/yy")

但问题是,当我尝试使用此格式从创建操作提交日期时,它会返回错误,告知格式错误。

将默认(“MM / dd / yy”)更改为(“dd / MM / yy”)的简单方法是什么?

提前致谢

3 个答案:

答案 0 :(得分:5)

您可以通过添加

逐页更改文化信息
<%@ Page UICulture="en" Culture="en-GB" %>

或通过添加到您的web.config

在所有页面中全局显示
<globalization uiCulture="en" culture="en-GB" />

两者都会将DateTime模型绑定更改为dd / MM / yyyy,因此无需转换。

有关详细信息,请参阅this question

等效代码是

CultureInfo.CurrentUICulture.DateTimeFormat
 = CultureInfo.CurrentCulture.DateTimeFormat
 = new CultureInfo( "en-GB", false ).DateTimeFormat;

答案 1 :(得分:3)

是的。肯定是伙伴:))

尝试更改当前线程的文化。默认情况下,它需要系统的操作系统。但你可以覆盖它。

检查一下......

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");

Here's a good post解释....

HTH。

答案 2 :(得分:0)

你的问题在于,由于编译器在两种情况下都只看到two digits/two digits/two digits,因此在尝试实际强制转换之前,它无法知道您需要day/month/year而不是month/day/year,并注意到您的月份值为>= 12

你可以通过在/上拆分日期来解决这个问题,并将“正确”顺序的参数输入编译器,如下所示:

string[] dateParts = input.Split("/");
int day; int month; int year;

// You could use a boolean variable here to double-check that all casts are successful
Int32.TryParse(dateParts[0], out day);
Int32.TryParse(dateParts[1], out month);
Int32.TryParse(dateParts[2], out year);

var output = new DateTime(year, month, day);

如果你把它放在一个单独的函数中,你可以像这样使用它来支持这两种格式:

DateTime releaseDate;
try
{
    // will throw exception if input is not in the default format
    releaseDate = new DateTime(input);
}
catch (InvalidFormatException ex)
{
    releaseDate = GetDateTimeFromNonStandardInput(input);
}
catch 
{
    throw; // or do whatever error handling you feel like.
}

就个人而言,我会将GetDateTimeFromNonStandardInput()作为DateTime类的扩展方法。