如何在asp.net core razor pages 2.2中设置日期格式和文化

fin*_*s10 0 c# culture date-formatting asp.net-core razor-pages

我正在使用 Asp.Net Core 2.2 Razor Pages 应用程序。我想在应用程序级别设置应用程序文化和日期格式。所以经过一些谷歌搜索后,我最终ConfigureServicesStartup.cs 的方法中添加了以下代码

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;
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。我以错误的格式获取日期。例如, DateTime.Now.ToShortDateString()返回6/25/2019而不是06/25/2019。同样是问题DateTime.Now.ToLongDateString()

如果我将格式更改为“dd/MM/yyyy”,它会返回25/06/2019的日期吗??

我在本地开发环境中运行它。另外,我期望我的应用程序在任何环境、任何机器、任何文化中以我在上面设置的相同格式获取日期。

请帮助和指导我哪里出错了。

提前致谢!!

Pan*_*vos 6

这里有两个问题:

  1. 如何正确本地化 Web 应用程序和
  2. 如何使用自定义文化?

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
});
Run Code Online (Sandbox Code Playgroud)

我选择ru-RU它是因为它使用一个点作为日期分隔符。推杆

@DateTime.Today.ToString()
Run Code Online (Sandbox Code Playgroud)

在 Razor 页面中,这会产生

25.06.2019 0:00:00
Run Code Online (Sandbox Code Playgroud)

您也可以将自己的习俗文化传递给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
});
Run Code Online (Sandbox Code Playgroud)

产生:

06/25/2019 00:00:00
Run Code Online (Sandbox Code Playgroud)