经过一番挖掘之后,我最终将Thread
的CurrentCulture值设置为在控制器的操作方法中具有CultureInfo(“ en-US”):
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US")
如果要在每个视图上都具有此设置,则可以使用以下其他选项。
关于CurrentCulture
财产价值:
此属性返回的CultureInfo对象及其关联的对象确定日期,时间,数字,货币值,文本的排序顺序,大小写约定和字符串比较的默认格式。
资料来源:MSDN CurrentCulture
注意:CurrentCulture
如果控制器已经使用CultureInfo("en-US")
日期格式为的类似版本运行,则 先前的属性设置可能是可选的"MM/dd/yyyy"
。
设置CurrentCulture
属性后,添加代码块以将日期转换"M/d/yyyy"
为视图中的格式:
@{
var shortDateLocalFormat = "";
if (Model.AuditDate.HasValue) {
shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy");
}
}
@shortDateLocalFormat
上面的@shortDateLocalFormat
变量是用Works格式化的ToString("M/d/yyyy")
。如果ToString("MM/dd/yyyy")
使用了,就像我首先做的那样,那么您最终将遇到前导零问题。也像汤米 推荐的ToString("d")
作品一样。实际上"d"
代表“短日期模式”,也可以用于不同的文化/语言格式。
我猜上面的代码块也可以用一些很酷的辅助方法或类似方法代替。
例如
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy");
}
@shortDateLocalFormat
}
可以与此助手调用一起使用
@DateFormatter(Model.AuditDate)
更新,我发现当使用DateTime.ToString(String,IFormatProvider)方法时,还有另一种做相同事情的方法。使用此方法时,则无需使用Thread
的CurrentCulture
属性。将CultureInfo("en-US")
作为第二个参数-> IFormatProvider传递给DateTime.ToString(String, IFormatProvider)
方法。
修改后的助手方法:
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US"));
}
@shortDateLocalFormat
}
.NET小提琴
No overload for method 'ToString' takes 1 arguments