3

我创建了一个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.

我哪里错了?

4

3 回答 3

9

我相信你需要解析冒号,基本上。我还建议使用不变的文化而不是当前的线程文化:

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);
于 2012-08-20T11:46:14.097 回答
1

colons当你进行解析时,你将不得不逃避:

TimeSpan.ParseExact("0:0:4:410", @"h\:m\:s\:fff", null)

自定义 TimeSpan 格式说明符不包括占位符分隔符,例如将天与小时、小时与分钟或秒与小数秒分开的符号。相反,这些符号必须作为字符串文字包含在自定义格式字符串中。例如,“dd.hh:mm”将句点 (.) 定义为天和小时之间的分隔符,将冒号 (:) 定义为小时和分钟之间的分隔符。

被咬了一段时间

于 2012-08-20T11:47:13.660 回答
1

尝试这个:

TimeSpan timeSpan = TimeSpan.ParseExact("0:0:4:410", @"h\:m\:s\:fff", null);
于 2012-08-20T11:54:51.090 回答