我正在努力寻找一种简单的方法来改变我的Table字段的DateTime格式。
我有一个名为Article的模型,其中包含一个名为releaseDate的字段,它是一个DateTime
我设法通过转换
来实现(视觉上)Article.releaseDate.ToString("dd/MM/yy")
但问题是,当我尝试使用此格式从创建操作提交日期时,它会返回错误,告知格式错误。
将默认(“MM / dd / yy”)更改为(“dd / MM / yy”)的简单方法是什么?
提前致谢
答案 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
类的扩展方法。