我以这种方式创建了TimeSpan
TimeSpan ts = new Timespan();
// Do some addition and subtraction on it
然后我使用此
将其保存到文件中string.Format("{0}:{1}:{2}:{3}", ts.Hours, ts.Minutes, ts.Seconds, ts.MilliSeconds);
从中返回的各种值都是这样的
0:0:4:410
0:0:1:425
0:0:1:802
0:0:1:509
0:0:1:674
0:0:1:628
0:0:2:76
如何将其转换回TimeSpan。
我正在使用
TimeSpan.ParseExact("0:0:4:410", "h:m:s:fff", null);
但它给了我错误Input String is not in correct format.
我哪里错了?
答案 0 :(得分:8)
我认为你需要解析冒号,基本上。我还建议使用不变文化而不是当前的线程文化:
var ts = TimeSpan.ParseExact("0:0:4:410", @"h\:m\:s\:fff",
CultureInfo.InvariantCulture);
自定义TimeSpan格式说明符不包括占位符分隔符符号,例如将小时数与小时数,小时数与分数小时数或秒数与小数秒数分隔开的符号。相反,这些符号必须作为字符串文字包含在自定义格式字符串中。例如,“dd.hh:mm”将句点(。)定义为天和小时之间的分隔符,并将冒号(:)定义为小时和分钟之间的分隔符。
我还建议使用h:mm:ss.fff
格式 - 我相信这会比您当前的格式更清晰。请注意,您可以直接使用该格式,而不是当前的格式化方法:
const string TimeSpanFormat = @"h\:mm\:ss\.fff";
string text = ts.ToString(TimeSpanFormat, CultureInfo.InvariantCulture);
...
TimeSpan parsed = TimeSpan.ParseExact(text, TimeSpanFormat,
CultureInfo.InvariantCulture);
答案 1 :(得分:1)
当你进行解析时,你将不得不逃避colons
TimeSpan.ParseExact("0:0:4:410", @"h\:m\:s\:fff", null)
自定义TimeSpan格式说明符不包含占位符 分隔符号,例如将小时与小时分开的符号, 几分钟或几秒钟的小时数。相反,这些 符号必须作为字符串包含在自定义格式字符串中 文字。例如,“dd.hh:mm”将句点(。)定义为 天和小时之间的分隔符,以及冒号(:)作为分隔符 小时和分钟之间。
答案 2 :(得分:1)
试试这个:
TimeSpan timeSpan = TimeSpan.ParseExact("0:0:4:410", @"h\:m\:s\:fff", null);