繁体   English   中英

如何在asp.net核心剃须刀页面2.2中设置日期格式和区域性

[英]How to set date formats and culture in asp.net core razor pages 2.2

我正在使用Asp.Net Core 2.2 Razor Pages应用程序。 我想在应用程序级别设置应用程序区域性和日期格式。 因此,经过一番谷歌搜索后,我最终在Startup.cs的 ConfigureServices方法中添加了以下代码

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

我正在本地开发环境中运行它。 我还期望我的应用程序可以在任何环境,任何计算机,任何区域性下以与我上面设置的格式相同的格式获取日期。

请协助并指导我哪里做错了。

提前致谢!!

这里有两个问题:

  1. 如何正确定位网络应用程序以及
  2. 如何使用习俗文化?

ASP.NET Core和ASP.NET提供了它们自己的全球化和本地化功能,它们可以在多个级别(应用程序,页面,请求)工作。 您应该检查ASP.NET Core中的全球化和本地化,以了解这些功能如何在ASP.NET Core中工作。 与其他所有内容一样,服务是通过中间件提供的。

也有很多关于此的博客文章。 我之所以选择这一名称,是因为标题为Internationalization-ASP.NET Core:从0到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()

在剃刀页面中产生

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

您的WebApplication应用程序使用多个线程,如果您设置当前线程的CurrentCultureCurrentUICulture ,其他线程可能会有所不同。

尝试使用DefaultThreadCurrentCultureDefaultThreadCurrentUICulture

CultureInfo.DefaultThreadCurrentUICulture = culture;
CultureInfo.DefaultThreadCurrentCulture = culture;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM