2d 10:00:00 到 C# 中的 TimeSpan

2d 10:00:00 to TimeSpan in C#

可以通过某种方式转换为:

2d 10:00:00

到 C# 中的 TimeSpan? 已经有转换它的函数了?

其他一些示例可能是:

30d 00:00:00
1m 3d 20:00:01
1y 2d 00:00:00

甚至只是:

3d
10d
3m
3y 10d

TimeSpan 的解析能力非常有限,最多只能达到几天(而不是几个月或几年)。另一个复杂性是其中一些跨度是上下文相关的。从 2 月开始的 3m 跨度(有 28/29 和 30 天的月份)不同于从 7 月开始的 3m 跨度(有 2 个 31 天的月份)。

所以这取决于你想做什么 确定最好的解析方式。在某些时候,您必须按空格拆分字符串并将 NmNy 组件转换为天数,将解析的时间字符串组件(hh:mm:ss)添加到总共生成 TimeSpan.

天、小时、分钟和秒很容易,只要您有明确定义的输入格式即可:

string input = "2d 10:00:00";
Timespan parsedTimespan = TimeSpan.ParseExact(input, @"d\d\ hh\:mm\:ss", CultureInfo.InvariantCulture)

正如其他人所指出的,月份、年份等是上下文相关的。从技术上讲,天数也可以,但在这种情况下,“天数”始终等于 24 小时,无论您的日历如何。

要支持其他格式,如“2d”,您可能必须根据自己提出的规范编写自己的解析代码。如果这变得非常复杂,像 Sprache 这样的框架可以提供帮助。