C# 如何在asp.net core razor pages 2.2中设置日期格式和区域性
我正在使用Asp.NETCore2.2RazorPages应用程序。我想在应用程序级别设置应用程序区域性和日期格式。所以在谷歌搜索之后,我在Startup.cs的C# 如何在asp.net core razor pages 2.2中设置日期格式和区域性,c#,asp.net-core,date-formatting,razor-pages,culture,C#,Asp.net Core,Date Formatting,Razor Pages,Culture,我正在使用Asp.NETCore2.2RazorPages应用程序。我想在应用程序级别设置应用程序区域性和日期格式。所以在谷歌搜索之后,我在Startup.cs的ConfigureServices方法中添加了以下代码 public void ConfigureServices(IServiceCollection services) { // setting the application culture to en-US with MM/dd/yyyy
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()
返回2019年6月25日,而不是2019年6月25日。DateTime.Now.ToLongDateString()也存在同样的问题。
如果我将格式更改为“dd/MM/yyyy”,它会返回2019年6月25日的日期吗
我在本地的开发环境中运行这个。我还希望我的应用程序能够在任何环境、任何机器、任何文化中以我上面设置的相同格式获取日期
请帮助和指导我在哪里错了
提前谢谢 您的
WebApplication
使用多个线程,如果您设置当前线程的CurrentCulture
或CurrentUICulture
,其他线程可能会有所不同
尝试使用DefaultThreadCurrentCulture
和DefaultThreadCurrentUICulture
:
CultureInfo.DefaultThreadCurrentUICulture = culture;
CultureInfo.DefaultThreadCurrentCulture = culture;
这里有两个问题:
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
从文档开始。您可以通过设置请求区域设置。您可能只需要调用
app.UseRequestLocalization
,使用app.UseRequestLocalization
时设置短日期和长日期格式,这根本不会影响请求区域性。ASP.NET Core有自己的本地化机制,甚至可以检测浏览器的首选语言并使用它们来格式化数据。我使用它在我的ASP.NET Core应用程序中设置本地化。Hi@Panagiotis感谢您的回答和精彩的解释。这在代码中运行良好。但这不适用于ef核心迁移。在我的contextOnModelCreating
方法中,我有一些带有日期时间值的日期字段,当我添加迁移时,保存在数据库中的日期的格式不同。请帮忙。@Abdul你不是这么要求的。EF与web应用程序无关,它是一个ORM。在任何情况下,日期都没有格式,它们是二进制值。格式仅在将字符串解析为日期或将日期格式化为字符串时适用。也许你把客户端工具显示日期的方式错当成了实际的格式?是的,我有点困惑。我想我误解了你说的话。很抱歉,我正处于学习阶段。@Abdul这主要是微软的错误-EF和ASP.NET核心是独立的团队,过去有不同的回购协议。几年前,他们决定最好将EF置于ASP.NET核心之下,尽管这不仅仅是关于web开发。这让很多人感到困惑,最近有一半的EF问题使用了错误的标签。