c# - 如何在asp.net core razor pages 2.2中设置日期格式和文化
问题描述
我正在使用 Asp.Net Core 2.2 Razor Pages 应用程序。我想在应用程序级别设置应用程序文化和日期格式。因此,经过一番谷歌搜索后,我最终在Startup.csConfigureServices
的方法中添加了以下代码
public void ConfigureServices(IServiceCollection services)
{
// setting the application culture to en-US with MM/dd/yyyy short date pattern.
var culture = CultureInfo.CreateSpecificCulture("en-US");
var dateformat = new DateTimeFormatInfo { ShortDatePattern = "MM/dd/yyyy", LongDatePattern = "MM/dd/yyyy hh:mm:ss tt" };
culture.DateTimeFormat = dateformat;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
但这似乎不起作用。我得到的日期格式错误。例如,
DateTime.Now.ToShortDateString()
返回6/25/2019而不是06/25/2019。同样是问题DateTime.Now.ToLongDateString()
如果我将格式更改为“dd/MM/yyyy”,它会返回25/06/2019的日期吗?
我在我的本地开发环境中运行它。我还期望我的应用程序在任何环境、任何机器、任何文化中以我上面设置的相同格式获取日期。
请协助和指导我哪里错了。
提前致谢!!
解决方案
这里有两个问题:
- 如何正确本地化 Web 应用程序和
- 如何使用自定义文化?
ASP.NET Core 和 ASP.NET 提供了自己的全球化和本地化功能,可在多个级别(应用程序、页面、请求)上工作。您应该检查ASP.NET Core 中的全球化和本地化,以了解这些功能在 ASP.NET Core 中的工作方式。与其他一切一样,服务是通过中间件提供的。
也有很多关于这个的博客文章。我之所以选择这个是因为标题Internationalization - ASP.NET Core: From 0 to overkill。它以更简洁的方式解释了文档所做的相同事情。
不过,对于您的具体问题,所需要做的就是为每个请求设置文化。这可以通过本地化中间件的UseRequestLocalization方法来完成。
在 Startup.cs 中Configure(IApplicationBuilder, IWebHostEnvironment)
,就在app.UseStaticFiles()
您可以添加调用UseRequestLocalization
以指定文化之前:
var supportedCultures = new[]
{
new CultureInfo("ru-RU"),
};
app.UseRequestLocalization(new RequestLocalizationOptions{
DefaultRequestCulture = new RequestCulture("ru-RU"),
SupportedCultures=supportedCultures,
SupportedUICultures=supportedCultures
});
我选择ru-RU
是因为它使用点作为日期分隔符。推杆
@DateTime.Today.ToString()
在 Razor 页面中,这会产生
25.06.2019 0:00:00
您也可以传递您自己的自定义文化UseRequestLocalization
。使用这种自定义文化:
var culture = CultureInfo.CreateSpecificCulture("en-US");
var dateformat = new DateTimeFormatInfo {
ShortDatePattern = "MM/dd/yyyy",
LongDatePattern = "MM/dd/yyyy hh:mm:ss tt"
};
culture.DateTimeFormat = dateformat;
var supportedCultures = new[]
{
culture
};
app.UseRequestLocalization(new RequestLocalizationOptions{
DefaultRequestCulture = new RequestCulture(culture),
SupportedCultures=supportedCultures,
SupportedUICultures=supportedCultures
});
生产:
06/25/2019 00:00:00
推荐阅读
- twig - 获取渲染控制器中的一般路由
- html - 如何在 Thymaleaf Html 部分中使用点而不是逗号 th:field?
- python - MATLAB 结构到 Python
- python - 无法根据输出运行 if 函数
- android - 我的网站是(http)形式,但它在(android studio)中询问(https)不起作用
- nix - Nix 如何将单个 NPM 包安装为独立软件?
- ngx-bootstrap - 如何修复 ngx-bootstrap “无法解决”错误
- mongoose - 猫鼬关闭自动创建集合(表)
- entity-framework - EntityFramework,使用复合键创建实体的问题
- sql - PL/pgSQL:为什么我收到“设置返回函数”消息错误?