C# .Net 4.5.x-使用可选部分的自定义时间跨度格式?

C# .Net 4.5.x-使用可选部分的自定义时间跨度格式?,c#,.net,vb.net,format,timespan,C#,.net,Vb.net,Format,Timespan,我有一个数据处理系统,它以Timespan的形式返回许多变量。用户可以通过提供一个格式字符串来配置他们希望如何查看此输出,然后我将其应用于timespan e、 g.用户将格式设置为d\,\h:mm:ss,输出为0,0:00:00(表示零) 我想让系统能够自动跳过天或小时,如果它们为零 i、 e.用户设置格式[d\,][h:]mm:\ss,在不到一小时的时间内从00:00到59:59,在不到一天的时间内从1:00到23:59:59,然后从1,00:00:00到x,nn:nn:nn,其中x=天数

我有一个数据处理系统,它以Timespan的形式返回许多变量。用户可以通过提供一个格式字符串来配置他们希望如何查看此输出,然后我将其应用于timespan

e、 g.用户将格式设置为d\,\h:mm:ss,输出为0,0:00:00(表示零)

我想让系统能够自动跳过天或小时,如果它们为零

i、 e.用户设置格式[d\,][h:]mm:\ss,在不到一小时的时间内从00:00到59:59,在不到一天的时间内从1:00到23:59:59,然后从1,00:00:00到x,nn:nn:nn,其中x=天数

内置的timespan不提供方括号中的“可选”部分


有没有一种简单的方法可以实现我没有看到的目标,或者我需要编写自己版本的TimeSpan formatter吗?

不太优雅,但我做了如下操作:

    Dim fmt As String
    fmt = If(thisTimespan >= TimeSpan.FromDays(1), "d\d\-\ h\:mm\:ss\.fff", "h\:mm\:ss\.fff")

您可以轻松地扩展此功能,以消除不必要的时间。

C#或Vb?你有两个tagsEither/or,我的代码是用VB编写的,但c#解决方案也同样有用。如果代码中的格式是固定的,这也可以,但用户可以配置它。e、 g.他们可能不希望在天数后使用逗号;他们可能永远不想显示天数…您可以使用任何源进行格式化。您可以在示例中拆分带括号的部分(用户指定),并根据时间跨度的值将它们添加到最终格式字符串(不带括号)。