.NET Core 7中DateTime.ToString()未按指定格式输出问题
问题原因
在.NET的自定义日期格式规则里,/是区域性敏感的日期分隔符占位符,它会自动替换为当前应用所使用的区域性(Culture)中定义的日期分隔符。如果你的Web应用默认使用的区域性日期分隔符是-,就会出现代码里写的/被替换成连字符的情况。
解决方案
1. 指定不变区域性强制用斜杠
直接在ToString方法中传入InvariantCulture,强制使用固定的斜杠作为分隔符:
@DateTime.UtcNow.ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture)
2. 转义斜杠作为普通字符
如果不想指定区域性,可以通过转义把/当作普通字符处理,有两种方式:
// 用反斜杠转义 @DateTime.UtcNow.ToString("MM\\/dd\\/yyyy") // 或者用单引号包裹 @DateTime.UtcNow.ToString("MM'/'dd'/'yyyy")
3. 全局设置应用区域性
如果希望整个Web应用都使用以/作为日期分隔符的区域性(比如en-US),可以在Program.cs中配置请求本地化:
var builder = WebApplication.CreateBuilder(args); // 配置默认区域性为en-US builder.Services.Configure<RequestLocalizationOptions>(options => { var enUsCulture = new System.Globalization.CultureInfo("en-US"); options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture(enUsCulture); options.SupportedCultures = new[] { enUsCulture }; options.SupportedUICultures = new[] { enUsCulture }; }); var app = builder.Build(); // 启用请求本地化中间件 app.UseRequestLocalization(); // 其他中间件配置... app.Run();
内容的提问来源于stack exchange,提问作者Bagzli
相关产品推荐
相关产品推荐

