[英]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 ?
我正在本地开发环境中运行它。 我还期望我的应用程序可以在任何环境,任何计算机,任何区域性下以与我上面设置的格式相同的格式获取日期。
请协助并指导我哪里做错了。
提前致谢!!
这里有两个问题:
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
应用程序使用多个线程,如果您设置当前线程的CurrentCulture
或CurrentUICulture
,其他线程可能会有所不同。
尝试使用DefaultThreadCurrentCulture
和DefaultThreadCurrentUICulture
:
CultureInfo.DefaultThreadCurrentUICulture = culture;
CultureInfo.DefaultThreadCurrentCulture = culture;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.