将字符串解析为 TimeSpan

发布于 2024-07-04 12:55:16 字数 89 浏览 7 评论 0原文

我有一些 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

我爱人 2024-07-11 12:55:16

DateTime.ParseExactDateTime.TryParseExact 可让您指定输入的确切格式。 获取 DateTime 后,您可以获取 DateTime.TimeOfDay,它是一个 TimeSpan

如果没有 TimeSpan.TryParseExact,我认为“优雅”的解决方案是不可行的。

@buyutec 正如您所怀疑的,如果时间跨度超过 24 小时,则此方法将不起作用。

DateTime.ParseExact or DateTime.TryParseExact lets you specify the exact format of the input. After you get the DateTime, you can grab the DateTime.TimeOfDay which is a TimeSpan.

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.

三岁铭 2024-07-11 12:55:16

这似乎有效,尽管有点黑客:

TimeSpan span;


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
            MessageBox.Show(span.ToString());

This seems to work, though it is a bit hackish:

TimeSpan span;


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
            MessageBox.Show(span.ToString());
一江春梦 2024-07-11 12:55:16

TimeSpan.ParseTimeSpan.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.

诠释孤独 2024-07-11 12:55:16

这是一种可能性:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));

如果您想让代码更加优雅,请使用扩展方法:

public static TimeSpan ToTimeSpan(this string s)
{
  TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
  return t;
}

那么您可以这样做

"05h:30m".ToTimeSpan();

Here'e one possibility:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));

And if you want to make it more elegant in your code, use an extension method:

public static TimeSpan ToTimeSpan(this string s)
{
  TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
  return t;
}

Then you can do

"05h:30m".ToTimeSpan();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文