C#中解析HH:mm:ss字符串为TimeSpan异常:24:00:00被识别为24天
问题原因
TimeSpan.Parse的默认解析逻辑会将第一段数值≥24的冒号分隔字符串识别为天数:小时:分钟格式,因此"24:00:00"会被解析为24天而非24小时。
正确实现方式
方式一:使用TimeSpan.ParseExact指定解析格式
通过明确指定小时:分钟:秒的格式,强制解析逻辑按预期处理:
string cacheExpirationTime = "24:00:00"; var cacheOptions = new MemoryCacheOptions() { ExpirationScanFrequency = TimeSpan.ParseExact( cacheExpirationTime, @"hh\:mm\:ss", CultureInfo.InvariantCulture, TimeSpanStyles.None) };
格式字符串@"hh\:mm\:ss"明确要求按小时:分钟:秒解析,即使小时数超过23也不会被识别为天数。
方式二:拆分字符串后直接构造TimeSpan
如果格式固定为小时:分钟:秒,也可以手动拆分数值后构造TimeSpan,逻辑更直观:
string cacheExpirationTime = "24:00:00"; var timeParts = cacheExpirationTime.Split(':'); var hours = int.Parse(timeParts[0]); var minutes = int.Parse(timeParts[1]); var seconds = int.Parse(timeParts[2]); var cacheOptions = new MemoryCacheOptions() { ExpirationScanFrequency = new TimeSpan(hours, minutes, seconds) };
补充说明:两种方式最终得到的
TimeSpan均表示24小时(与1天的tick数完全一致),对MemoryCacheOptions.ExpirationScanFrequency的功能没有影响。
内容的提问来源于stack exchange,提问作者Aritz
相关产品推荐
相关产品推荐

