如何在ASP.NET Core中设置正确的日期格式

3

我将使用asp.net core创建网页。我正在尝试将默认日期格式从英语更改为瑞典语,格式为yyyy-MM-dd。

这是我的当前模型:

[DataType(DataType.Date)]
[Display(Name = "Required delivery date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
public Nullable<DateTime> DelDt { get; set; }

这是 Razor 页面。
<td><label asp-for="Order.DelDt" class="control-label "></label></td>
    <td><input asp-for="Order.DelDt" asp-format="{0:yyyy-MM-dd}" tabindex=17 class="form-control"></td>

这是样子:

这是样子

enter image description here

如何更改我的代码,以便图像中显示的日期格式显示瑞典日期格式yyyy-MM-dd?

注意:我还尝试将HTML标签设置为html lang="sv",但没有成功。

enter image description here


使用Razor转换DateTime格式 - FortyTwo
4个回答

3
您在浏览器中看到的是用户操作系统(可能是您自己的操作系统)提供的本地化日期格式。有几件事情需要注意。首先,由于您将此字段绑定到带有DataType.DateDateTime,因此Razor会生成一个具有type="date"的输入。这是HTML5输入类型,在支持它的浏览器(所有现代浏览器)中将触发实际的浏览器“日期”控件。
其次,HTML5日期输入获取并返回ISO日期YYYY-MM-DD,但显示在输入中的日期将针对用户进行本地化。您无法控制此显示;它基于用户操作系统上的文化设置。因此,如果您实际上使用瑞典文化设置,则此处的显示将是您想要的。但是,显然您正在使用操作系统上的en-US文化设置,因此您看到的就是这样。同样,您无法控制此内容;您只需相信它是正确的,或者可以更改操作系统的文化设置以以不同的格式查看它。
第三,这涵盖了支持的浏览器,但在不受支持的浏览器(几乎只有IE 9及以下版本)中,这将呈现为普通文本输入,没有格式,并且在这些浏览器中允许用户自由输入文本。因此,如果您需要支持旧版浏览器,则应使用填充程序或一些日期输入库,该库将允许您掩盖/控制用户输入。根据您最终使用的库的不同,您可能能够明确控制格式,或者它也可能依赖于文化设置(如果正确本地化)。您需要查阅最终选择的任何库的文档。
最后,如果您想要对此输入进行明确控制,可以自己提供类型属性,并将其设置为text
<input type="text" asp-for="Order.DelDt" tabindex=17 class="form-control">

然后,您可以使用任何客户端解决方案来格式化日期以获得所需的效果。这样做的好处是可以在所有用户和浏览器类型之间呈现统一的体验。但是,正如优点一样,缺点也很明显。 date 输入类型在移动设备上有深度集成,并且通常提供更好的用户体验。如果您最终使用常规文本输入,则应确保您使用的任何客户端库在移动设备上都提供适当的体验。


好的,谢谢。但是我在Windows中使用瑞典地区设置,在浏览器中使用瑞典语言,但仍然显示其他日期格式。 - Thomas Adrian
好的,有些东西不正确。无论如何,重点仍然是你不能直接控制这个格式。它由浏览器控制,基于操作系统的语言环境和文化设置。如果不正确,那么你的操作系统语言环境和文化设置就有问题了。就这么简单。 - Chris Pratt
我不确定你完全正确,因为我在其他平台上工作时,可以根据HTML语言标签和浏览器中设置的语言来控制日期。 - Thomas Adrian
不同平台上的不同浏览器处理方式可能会有所不同,这确实存在一定的变异性。然而,这并不是重点。重点在于:您对此处显示格式没有直接控制权,只有对您正在测试的平台(或平台)具有间接控制权。如果显示不正确,则某个地方的文化设置可能存在问题。 - Chris Pratt
我刚意识到早先我在浏览器中转换成了瑞典语,但是我没有将其设置为默认的显示语言。在设置后,现在一切都正常运作,无需任何文化或asp标签设置。只要用户在浏览器中选择了瑞典语作为显示语言,日期也会以瑞典格式显示。 - Thomas Adrian

2

HTML5的date输入类型接受并返回ISO日期格式YYYY-MM-DD


.ToString("yyyy-MM-dd")

1
要显示dd-mm-yyyy日期格式,请按照以下说明进行操作,
数据注释应如下所示,
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
[DataType(DataType.Date)]
public DateTime StartDate { get; set; }

"视图应该如下所示:"
 <label asp-for="StartDate"></label>
 <input asp-for="StartDate" class="form-control" />

0

您可以通过将以下代码放入Configure方法中来全局更改本地化设置

var ci = new CultureInfo("sv-SE");
app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture(ci),
    SupportedCultures = new List<CultureInfo>
    {
        ci,
    },
    SupportedUICultures = new List<CultureInfo>
    {
        ci,
    }
});

1
它没有帮助,仍然在Chrome中显示mm/dd/yyyy(而我已经将瑞典语设置为Chrome语言)。 - Thomas Adrian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接