如何在指定CultureInfo时设置DateTime组件显示顺序且隐藏AM/PM标识
解决方案
你可以通过自定义目标文化的时间格式规则实现需求,既保留不同文化的日期排列习惯,又能输出24小时制无AM/PM的时间格式。
方法1:修改文化的时间格式配置(更简洁)
.NET 中标准格式符g对应「短日期+短时间」的组合输出,你只需要修改对应文化的ShortTimePattern为24小时制格式即可:
// 以en-GB为例 var gbCulture = new CultureInfo("en-GB"); gbCulture.DateTimeFormat.ShortTimePattern = "HH:mm"; // 直接使用g格式符输出 string gbResult = dateTimeOffset.ToString("g", gbCulture); // 输出:23/08/2020 09:00 // 以en-US为例 var usCulture = new CultureInfo("en-US"); usCulture.DateTimeFormat.ShortTimePattern = "HH:mm"; string usResult = dateTimeOffset.ToString("g", usCulture); // 输出:08/23/2020 09:00
这种方式的日期部分完全沿用对应文化的默认短日期规则,无需手动处理日期顺序。
方法2:动态拼接适配文化的格式串
如果不想修改文化实例的配置,可以动态生成符合当前文化规则的格式串:
public static string FormatDateTimeOffsetByCulture(DateTimeOffset date, CultureInfo culture) { // 读取文化自带的短日期格式 string datePattern = culture.DateTimeFormat.ShortDatePattern; // 固定使用24小时制时间格式 const string timePattern = "HH:mm"; return date.ToString($"{datePattern} {timePattern}", culture); } // 调用示例 string gbResult = FormatDateTimeOffsetByCulture(dateTimeOffset, new CultureInfo("en-GB")); string usResult = FormatDateTimeOffsetByCulture(dateTimeOffset, new CultureInfo("en-US"));
注意:不要直接修改
CultureInfo的静态默认实例,每次使用时新建或克隆实例修改,避免影响全局其他代码的日期格式化逻辑。
内容的提问来源于stack exchange,提问作者Bassie
相关产品推荐
相关产品推荐

