.NET 7中如何让TimeOnly始终输出含秒的不变文化长时间字符串?
解决方案
要始终得到HH:mm:ss格式(包含秒的24小时制时间字符串),不受当前文化影响,你可以通过以下两种可靠方式实现:
方法一:自定义格式字符串 + InvariantCulture
直接调用ToString方法,指定固定的时间格式字符串,并传入CultureInfo.InvariantCulture作为格式化参数,这是最直接可控的方式:
using System.Globalization; TimeOnly targetTime = new TimeOnly(15, 16, 17); string formattedTime = targetTime.ToString("HH:mm:ss", CultureInfo.InvariantCulture); // 无论当前系统文化是en-US还是其他,结果始终为 "15:16:17"
参数说明:
HH:代表24小时制的小时(取值范围00-23)mm:两位数字的分钟ss:两位数字的秒CultureInfo.InvariantCulture:确保格式化时使用固定的、不受地域文化影响的规则(比如时间分隔符始终是冒号)
方法二:复用不变文化的长时间格式(可选)
如果你想复用预定义的"长时间"格式逻辑,也可以直接调用不变文化的格式规则:
using System.Globalization; TimeOnly targetTime = new TimeOnly(15, 16, 17); string formattedTime = targetTime.ToString(DateTimeFormatInfo.InvariantInfo.LongTimePattern, CultureInfo.InvariantCulture); // 结果同样为 "15:16:17",因为不变文化的LongTimePattern默认就是"HH:mm:ss"
为什么之前的方法不适用?
ToLongTimeString():内部使用当前文化的长时间格式规则,不同文化(比如en-US)会返回12小时制带AM/PM的字符串,且无法指定文化参数。ToString()无参数/仅传文化参数:默认使用当前文化的短时间格式,不会包含秒数,且文化参数仅切换对应地域的格式规则,无法强制显示秒。
内容的提问来源于stack exchange,提问作者Helena
相关产品推荐
相关产品推荐

