代码之家  ›  专栏  ›  技术社区  ›  Thomas Adrian

如何在ASP.NET内核中设置正确的日期格式

  •  1
  • Thomas Adrian  · 技术社区  · 6 年前

    我正在使用asp.net核心创建网页。我正在尝试将默认日期格式从英语改为瑞典语,格式为yyyy-MM-dd

    这是我现在的模型

    [DataType(DataType.Date)]
    [Display(Name = "Required delivery date")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd}")]
    public Nullable<DateTime> DelDt { get; set; }
    

    <td><label asp-for="Order.DelDt" class="control-label "></label></td>
        <td><input asp-for="Order.DelDt" asp-format="{0:yyyy-MM-dd}" tabindex=17 class="form-control"></td>
    

    enter image description here

    注意:我还尝试将html标记设置为html lang=“sv”,但没有成功。

    enter image description here

    3 回复  |  直到 6 年前
        1
  •  2
  •   Chris Pratt    6 年前

    您在浏览器中看到的是用户操作系统(本例中可能是您的操作系统)提供的本地化日期格式。有几件事你应该注意。首先,因为您要将此字段绑定到 DateTime DataType.Date ),Razor正在生成输入 type="date" . 这是一种HTML5输入类型,在受支持的浏览器(所有现代浏览器)中,它将触发一个实际的浏览器“日期”控件。

    第二,HTML5日期输入接受并返回ISO日期 YYYY-MM-DD 事实上 使用瑞典文化设置,这里的显示将是您想要的。然而,很明显你在你的操作系统上使用了en-US文化设置,所以这就是你看到的。同样,你无法控制这一切;你只需要相信它是正确的,或者你可以改变你的操作系统文化设置,以不同的格式看到它。

    第三,这涵盖了受支持的浏览器,但在不受支持的浏览器(几乎只有ie9及以下版本)中,这将呈现为常规文本输入,没有格式,并允许用户在这些浏览器中自由输入文本。因此,如果您需要支持较旧的浏览器,您应该使用polyfill或一些日期输入库,允许您屏蔽/控制用户输入。取决于最终使用的库,您可能能够显式控制格式,或者如果格式正确本地化,它也可能依赖于区域性设置。你需要查阅任何你最终使用的图书馆的文档。

    text

    <input type="text" asp-for="Order.DelDt" tabindex=17 class="form-control">
    

    date 输入类型在移动设备上有很深的集成度,通常在那里提供更好的用户体验。如果您最终使用常规文本输入,那么您应该确保您使用的任何客户端库都能在移动设备上提供合适的体验。

        2
  •  2
  •   Shahbaz A.    6 年前

    HTML5 date 输入类型接受并返回ISO日期 YYYY-MM-DD

    .ToString("yyyy-MM-dd")
    
        3
  •  1
  •   John    4 年前

    数据注释应该是这样的,

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy}")]
    [DataType(DataType.Date)]
    public DateTime StartDate { get; set; }
    

    视图应如下所示,

     <label asp-for="StartDate"></label>
     <input asp-for="StartDate" class="form-control" />
    
        4
  •  0
  •   Alexandr Sargsyan    6 年前

    通过将这段代码放入 方法

    var ci = new CultureInfo("sv-SE");
    app.UseRequestLocalization(new RequestLocalizationOptions
    {
        DefaultRequestCulture = new RequestCulture(ci),
        SupportedCultures = new List<CultureInfo>
        {
            ci,
        },
        SupportedUICultures = new List<CultureInfo>
        {
            ci,
        }
    });