Unity3D中DateTime.ParseExact抛出字符串格式异常问题
解决DateTime.ParseExact解析"00:10:47:18"时的格式异常问题
你遇到的问题核心在于:你试图用DateTime来解析一个表示时间段的字符串,但DateTime是用来表示具体日期时间点的类型,而且格式字符串的语义和实际需求不匹配。
问题拆解
你的目标字符串是"00:10:47:18",看起来是天:时:分:秒的时间段格式,但你用了"dd:HH:mm:ss"作为格式字符串:
dd代表的是月份中的日期(取值范围是01-31),而你的字符串第一个部分是00,这超出了dd的合法范围,直接触发格式异常。- 就算把格式改成带引号的
"'dd':'HH':'mm':'ss'"也没用,引号只是转义冒号,但dd的语义还是月份日期,00依然不合法。
正确解决方案
如果这个字符串表示的是一段持续时间(比如0天10小时47分18秒),你应该用TimeSpan类型来解析,而不是DateTime。TimeSpan专门用于处理时间间隔,完美支持天:时:分:秒的格式:
// 方式1:指定格式解析 TimeSpan ts = TimeSpan.ParseExact("00:10:47:18", @"d\:hh\:mm\:ss", null); // 方式2:直接解析(TimeSpan默认支持这种格式) TimeSpan ts = TimeSpan.Parse("00:10:47:18");
如果你确实需要把这个时间段转换成某个基准时间的DateTime,可以在解析出TimeSpan后再和基准时间相加:
DateTime baseTime = DateTime.Today; // 或者你需要的任意基准日期 DateTime D = baseTime + ts;
额外说明
如果你坚持要用DateTime来解析(不推荐,因为语义完全不符),你需要把第一个部分改成合法的日期值(比如01),但这样得到的DateTime是某个月份的1日10点47分18秒,显然不是你想要的结果。
内容的提问来源于stack exchange,提问作者Pronay Peddiraju
相关产品推荐
相关产品推荐

