我有一点问题.
我想要做的是取这个字符串27.0并将其转换为时间跨度.
为了让它发挥作用,我尝试了各种我能想到的方式.
TimeSpan.Parse("27.0") 我知道这是格式问题,但我不确定要使用的格式.
我基本上有4个值
27.0
52.4
1:24.4
1:43.3
有没有一种简单的方法来处理所有这些格式?
谢谢!
对不起这些都是秒,除了1分钟,所以1分24秒4毫秒
您可以使用两种不同的方法.使用TimeSpan.From ...()方法之一.那些将数字转换为TimeSpan.例如,使用27秒将双27转换为TimeSpan
var ts = TimeSpan.FromSeconds(27)
Run Code Online (Sandbox Code Playgroud)
您将面临的唯一问题是它不允许您指定字符串.因此,您可以首先将字符串解析为double.如果你像那样天真地做,那么你可以得到你想要的东西.
var ts = TimeSpan.FromSeconds(double.Parse("27.0"))
Run Code Online (Sandbox Code Playgroud)
但是如果你在具有德语语言环境的系统上运行它,你将得到一个4分30秒的TimeSpan.原因是德语中的一个点不是一个数字的分隔符,它是一千个分隔符.所以这个数字被解析为"270".所以为了安全起见,你还应该提供一个NumberFormat.一个更好的方法是.
var culture = new CultureInfo("en-US");
var tsc = TimeSpan.FromSeconds(double.Parse("27.0", culture.NumberFormat));
Run Code Online (Sandbox Code Playgroud)
现在你得到你的27秒.但问题仍然是它只能正确解析你的两个第一个字符串.您的其他3个字符串仍然无法解析,因为您无法将它们转换为数字.但是我仍然添加了这个,要注意文化差异,如果你只是尝试解析一个数字到一个双重使用TimeSpan.FromSeconds()等等.
现在让我们进一步了解如何解析每个字符串.存在TimeSpan.Parse()和TimeSpan.ParseExact().
现在你仍然必须知道TimeSpan.Parse()使用特定于文化的格式.在没有用冒号分隔时间的国家/地区,TimeSpan.Parse()将失败.最重要的是,TimeSpan至少采用格式"hh:mm".但这种格式的结肠对文化敏感.您可以再次使用"en-US"文化,但它不能解决问题,因为他不接受格式"27.0".
这就是为什么必须使用TimeSpan.ParseExact()方法并提供此方法应该能够解析的格式的原因.它还允许您指定他应该能够解析的格式.你现在应该以这样的结局结束.
var culture = new CultureInfo("en-US");
var formats = new string[] {
@"s\.f",
@"ss\.f",
@"ss\.ff",
@"m\:ss\.f",
@"m\:ss\.ff",
@"mm\:ss\.ff"
};
foreach ( var str in new string[] { "27.0", "52.4", "1:24.4", "1:43.3" } ) {
var ts = TimeSpan.ParseExact(str, formats, culture.NumberFormat);
Console.WriteLine(ts.ToString());
}
Run Code Online (Sandbox Code Playgroud)
请注意,在此示例中,我添加了反斜杠以转义点和冒号.如果您不这样做,那么格式化程序本身会将其视为对文化敏感的分隔符.但你想要的只是冒号或点.
这段代码的输出将是
00:00:27
00:00:52.4000000
00:01:24.4000000
00:01:43.3000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2062 次 |
| 最近记录: |