【发布时间】:2016-06-03 16:34:24
【问题描述】:
用户输入是 555 我希望它是 05:55:00(时间跨度)。如何将其转换为 TimeSpan?使用什么格式?
var a = TimeSpan.ParseExact(/*user input string*/"5:55", new string[] { "%h\\:mm" }, CultureInfo.InvariantCulture);//OK output {05:55:00}
var b = TimeSpan.ParseExact(/*user input string*/"1111", new string[] { "%hmm" }, CultureInfo.InvariantCulture);//OK output {11:11:00}
var c = TimeSpan.ParseExact(/*user input string*/"555", new string[] { "%hmm", "hmm", "hhmm"}, CultureInfo.InvariantCulture);//Exception! None format works.
编辑:详细来说,我想将用户字符串输入格式化为小时和分钟 hh:mm。例如用户输入字符串:
- “5”为 05:00
- “12”为 12:00
- “1111”为 11:11
- “12:12”为 12:12
- “4:44”为 4:44
- 一个不工作的“555”是 5:55(抛出异常)
我现在正在使用:
private static string[] _foramts = {"%hmm", "hmm", "hhmm","%h", "hh\\:mm", "%h\\:mm" };
return TimeSpan.ParseExact((string)value, _foramts, CultureInfo.InvariantCulture).ToString("hh\\:mm");
有了PadLeft,现在也不例外,但是....
var d = TimeSpan.ParseExact(((string)value).PadLeft(4, '0'), new string[] { "%hmm", "hmm", "hhmm", "%h", "hh\\:mm", "%h\\:mm" }, CultureInfo.InvariantCulture).ToString("hh\\:mm");
“5”现在是 00:05,我希望它是 05:00
【问题讨论】:
-
我认为您也必须手动完成,将输入作为
string并执行一些 substring 或将其用作int并执行一些 @987654326 @ 和/获取您需要的数字。 -
已经是字符串了。我刚刚找到解决方案,但不是按格式。只需使用用户字符串输入:
.PadLeft(4,'0')。 -
这确实是一个糟糕的方法,但有效:TimeSpan ts = TimeSpan.FromSeconds((60 * (int)(int.Parse(input)/100)) + (int.Parse(input) % 100));
-
现在您可以使用 TimeSpan.FromMinutes 从秒更改为分钟。