DateTime.ToString指定格式输出异常问题求助
问题原因分析
- 格式字符串中的
/并非字面量斜杠,而是日期分隔符占位符,会被指定文化的DateTimeFormatInfo.DateSeparator值替换。 - 你的本地
en-US文化配置被修改:默认en-US的日期分隔符为/,但你的环境中该值已被改为-,因此所有依赖该文化的ToString调用都会输出-作为分隔符。 CultureInfo.InvariantCulture是固定不变的全局文化,其日期分隔符始终为/,因此这一行输出符合预期。
验证与解决方法
验证当前文化的日期分隔符
运行以下代码可确认问题根源:
var usCulture = new CultureInfo("en-US"); Console.WriteLine(usCulture.DateTimeFormat.DateSeparator); // 你的环境会输出 "-",正常环境输出 "/"
解决方式
- 强制输出字面量斜杠:在格式字符串中用单引号包裹
/,将其转为字面量:Console.WriteLine(DateTime.Today.ToString("yyyy'/'MM'/'dd")); // 始终输出 2022/10/24 - 恢复系统区域设置:打开系统「区域设置」,检查英语(美国)的日期格式分隔符,将其改回默认的
/。 - 代码层面重置文化配置:创建
en-US文化的独立副本,手动重置日期分隔符:var usCulture = new CultureInfo("en-US", false); usCulture.DateTimeFormat.DateSeparator = "/"; Console.WriteLine(DateTime.Today.ToString("yyyy/MM/dd", usCulture));
内容的提问来源于stack exchange,提问作者Forna
相关产品推荐
相关产品推荐

