将字符串解析为 TimeSpan
我有一些 xxh:yym 格式的字符串,其中 xx 是小时,yy 是分钟,例如“05h:30m”。 将这种类型的字符串转换为 TimeSpan 的优雅方法是什么?
I have some strings of xxh:yym format where xx is hours and yy is minutes like "05h:30m". What is an elegant way to convert a string of this type to TimeSpan?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
DateTime.ParseExact
或DateTime.TryParseExact
可让您指定输入的确切格式。 获取DateTime
后,您可以获取DateTime.TimeOfDay
,它是一个TimeSpan
。如果没有
TimeSpan.TryParseExact
,我认为“优雅”的解决方案是不可行的。@buyutec 正如您所怀疑的,如果时间跨度超过 24 小时,则此方法将不起作用。
DateTime.ParseExact
orDateTime.TryParseExact
lets you specify the exact format of the input. After you get theDateTime
, you can grab theDateTime.TimeOfDay
which is aTimeSpan
.In the absence of
TimeSpan.TryParseExact
, I think an 'elegant' solution is out of the mix.@buyutec As you suspected, this method would not work if the time spans have more than 24 hours.
这似乎有效,尽管有点黑客:
This seems to work, though it is a bit hackish:
是 TimeSpan.Parse 和 TimeSpan.TryParse 不是选项? 如果您没有使用“批准的”格式,则需要手动进行解析。 我可能会在正则表达式中捕获两个整数值,然后尝试将它们解析为整数,从那里您可以使用其构造函数创建一个新的 TimeSpan 。
Are TimeSpan.Parse and TimeSpan.TryParse not options? If you aren't using an "approved" format, you'll need to do the parsing manually. I'd probably capture your two integer values in a regular expression, and then try to parse them into integers, from there you can create a new TimeSpan with its constructor.
这是一种可能性:
如果您想让代码更加优雅,请使用扩展方法:
那么您可以这样做
Here'e one possibility:
And if you want to make it more elegant in your code, use an extension method:
Then you can do
来自另一个线程:
如何转换 xs :持续时间到时间跨度
From another thread:
How to convert xs:duration to timespan