如何在 asp.net core razor pages 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()
returns 6/25/2019 而不是 06/25/2019。同样是DateTime.Now.ToLongDateString()
的问题
如果我将格式更改为 "dd/MM/yyyy",它会 return 25/06/2019 中的日期吗??
我在本地开发环境中是运行这个。我还期望我的应用程序能够在任何环境、任何机器、任何文化中以我上面设置的相同格式获取日期。
请大家指点指点我错的地方。
提前致谢!!
您的 WebApplication
使用多线程,如果您设置当前线程的 CurrentCulture
或 CurrentUICulture
,其他线程可能会有所不同。
尝试使用 DefaultThreadCurrentCulture
和 DefaultThreadCurrentUICulture
:
CultureInfo.DefaultThreadCurrentUICulture = culture;
CultureInfo.DefaultThreadCurrentCulture = culture;
这里有两个问题:
- 如何正确本地化网络应用程序和
- 如何使用自定义文化?
ASP.NET Core 和 ASP.NET 提供它们自己的全球化和本地化功能,可在多个级别(应用程序、页面、请求)上工作。您应该查看 Globalization and Localization in ASP.NET Core 以了解这些功能在 ASP.NET Core 中的工作原理。与其他一切一样,服务是通过中间件提供的。
也有很多关于此的博客文章。由于标题 Internationalization - ASP.NET Core: From 0 to overkill,我选择了这个。它以更简洁的方式解释了文档所做的相同事情。
不过,对于您的具体问题,您只需为每个请求设置文化即可。这可以通过with the localization middleware's 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
我正在使用 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()
returns 6/25/2019 而不是 06/25/2019。同样是DateTime.Now.ToLongDateString()
如果我将格式更改为 "dd/MM/yyyy",它会 return 25/06/2019 中的日期吗??
我在本地开发环境中是运行这个。我还期望我的应用程序能够在任何环境、任何机器、任何文化中以我上面设置的相同格式获取日期。
请大家指点指点我错的地方。
提前致谢!!
您的 WebApplication
使用多线程,如果您设置当前线程的 CurrentCulture
或 CurrentUICulture
,其他线程可能会有所不同。
尝试使用 DefaultThreadCurrentCulture
和 DefaultThreadCurrentUICulture
:
CultureInfo.DefaultThreadCurrentUICulture = culture;
CultureInfo.DefaultThreadCurrentCulture = culture;
这里有两个问题:
- 如何正确本地化网络应用程序和
- 如何使用自定义文化?
ASP.NET Core 和 ASP.NET 提供它们自己的全球化和本地化功能,可在多个级别(应用程序、页面、请求)上工作。您应该查看 Globalization and Localization in ASP.NET Core 以了解这些功能在 ASP.NET Core 中的工作原理。与其他一切一样,服务是通过中间件提供的。
也有很多关于此的博客文章。由于标题 Internationalization - ASP.NET Core: From 0 to overkill,我选择了这个。它以更简洁的方式解释了文档所做的相同事情。
不过,对于您的具体问题,您只需为每个请求设置文化即可。这可以通过with the localization middleware's 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