C# dd/MM/yyyy格式在ASP.NET核心中不起作用

C# dd/MM/yyyy格式在ASP.NET核心中不起作用,c#,asp.net,validation,asp.net-core,C#,Asp.net,Validation,Asp.net Core,我正在努力在ASP.NET Core 2.1中获得正确的日期格式。我已经有了几个小时的各种解决方案,根本无法让它工作。 到目前为止我已经尝试过的事情: 在Startup.csConfigureServicesclass中设置区域性: // Add localization services.AddLocalization(options => options.ResourcesPath = "Resources"); services.Configure<RequestLocal

我正在努力在ASP.NET Core 2.1中获得正确的日期格式。我已经有了几个小时的各种解决方案,根本无法让它工作。 到目前为止我已经尝试过的事情:

  • 在Startup.cs
    ConfigureServices
    class中设置区域性:

    // Add localization
    services.AddLocalization(options => options.ResourcesPath = "Resources");
    
    services.Configure<RequestLocalizationOptions>(
    opts =>
    {
        var supportedCultures = new List<CultureInfo>
        {
    
                new CultureInfo("nl-NL"),
        };
    
        opts.DefaultRequestCulture = new RequestCulture("nl-NL");
        // Formatting numbers, dates, etc.
        opts.SupportedCultures = supportedCultures;
        // UI strings that we have localized.
        opts.SupportedUICultures = supportedCultures;
        opts.DefaultRequestCulture = new RequestCulture(culture: "nl-NL", uiCulture: "nl-NL");
    });
    
    Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL");
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("nl-NL");
    
    var supportedCultures = new[] { new CultureInfo("nl-NL") };
    app.UseRequestLocalization(new RequestLocalizationOptions
    {
        DefaultRequestCulture = new RequestCulture("nl-NL"),
        SupportedCultures = supportedCultures,
        SupportedUICultures = supportedCultures
    });
    
    Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL");
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("nl-NL");
    
  • 数据注释在viewmodel和normal模型中,第一个属性是
    DateTime
    属性,但该属性也不起作用:

    [DisplayName("Datum van machtiging")]
    [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
    [DataType(DataType.Date), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public string Datum_van_machtiging { get; set; }
    
  • 调用它的HTML(如果有必要):

    
    
  • 在将IIS express发布到IIS时为其设置正确的全球化。

  • My program.cs(如果这很重要,因为我发布到本地IIS。)

    公共类程序
    {
    公共静态void Main(字符串[]args)
    {
    BuildWebHost(args.Run();
    }
    公共静态IWebHost BuildWebHost(字符串[]args)=>
    WebHost.CreateDefaultBuilder(args)
    .useURL(@)http://0.0.0.0:5000")
    .Useii整合()
    .使用环境(“生产”)
    .UseStartup()
    .Build();
    }
    

编辑:顺便提一下,我也收到了这个警告:

您在启动时会这样做:

Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("nl-NL");
这可能不是您想要做的,因为它将为线程运行启动做这件事,并且您可能不做任何特定于区域性的事情。也就是说,它不会影响运行您的请求的线程。如果您只想锁定一种文化,您可以尝试使用此方法

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("nl-NL");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("nl-NL");
也许我没有完全正确地理解你的问题是什么,因为你没有确切地说明哪里出了问题,哪里没有把约会弄错。这些设置将影响特定于区域性的操作,如从数字到字符串的转换以及读取哪些资源文件

如果您的问题是HTML输入(这在您的问题中不是很清楚),那么您可以做的最好的事情就是使用C#非常理解的javascript中的ISO格式。例如:
2019-06-01
。那么你就不需要任何额外的东西来转换到特定的文化


我还将确保此ISO格式的有效性,以确保不可能以随机格式发送日期,而C#可能会随机理解,也可能不会随机理解,这取决于文化背景。

为什么要在Datum_van#machtiging字段中使用字符串? 您可以尝试:

public Datetime Datum_van_machtiging { get; set; }

DateTime是一个二进制值,它没有任何格式。SQL Server中与日期相关的类型也没有格式。仅当日期时间被格式化为字符串,或某些字符串被解析为日期时间时,格式才适用。您只能通过硬编码区域设置来引起问题。最大的问题是
字符串数据\u van_machting
。使用正确的日期类型,即
DateTime
您可能应该更清楚地说明您想要实现什么以及哪里出了问题?要解决此问题,请删除硬编码区域性的所有尝试以及将日期存储为字符串(对象属性或数据库字段)的所有尝试。你可以保证荷兰至少有一个终端用户使用德语作为第一种浏览器语言。一旦你去掉了字符串,唯一会引起麻烦的就是用户的输入。只是不要让用户输入开放式文本。使用日期选择器输入,并将值提取为ISO字符串。从Javascript发布时,请确保使用
toISOString()
。将发布ISO日期,即使它使用最终用户的区域设置进行表示。jQuery日期选择器插件通过不同的方法返回显示的文本和实际日期值,最终用户的浏览器语言选择可能会覆盖这些方法。如果设置了此设置,该设置是否具有“更高”的优先级?OP将日期存储在字符串属性中。这就是问题的原因,假设DateTime被破坏了。不是。OP在代码中加入了硬编码的NL文化,尽管大多数欧洲国家都使用这种日期格式。这肯定会引起相当多的麻烦,尤其是在三种语言的荷兰。您可以打赌至少有一个用户使用德语设置,使用DOTS。我怀疑OP在HTML输入方面有问题,并假设问题是DateTime,而不是HTML文本或Javascript输入。无论谁否决,这都是正确的使用类型。硬编码文化是错误的,完全没有必要。最有可能的问题是HTML输入字段使用本地化的日期字符串而不是ISO8601字符串。仍然不起作用。您是否使用任何日期选择器?是的,标准内置JQuery数据选择器@AlexandreRibeiro您是否正在加载该文件的特定语言环境文件?
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("nl-NL");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("nl-NL");
public Datetime Datum_van_machtiging { get; set; }