使用短版本在C#中格式化时间/持续时间的方法

使用短版本在C#中格式化时间/持续时间的方法,c#,asp.net,timespan,duration,C#,Asp.net,Timespan,Duration,我正在寻找一种方法,为用C#编写的ASP.NET web应用程序格式化最初以小时表示的持续时间(作为“双精度”变量)。我需要一个只有2个有效值的简短版本。例如: 1h:20m 2d:20h 2mo:12d 5y:2mo 我搜索了一下,似乎C#没有一个内置函数来满足我的需要 所以我决定写我自己的,但我被所有部分的正确格式难住了。例如,我可能会得到一个字符串,比如“1d:24h”,或者对于一个简单的2个月,我可能会得到“1mo:29d” 注:我遇到的问题是如何定义一个月和一年中有多少天。日期时

我正在寻找一种方法,为用C#编写的ASP.NET web应用程序格式化最初以小时表示的持续时间(作为“双精度”变量)。我需要一个只有2个有效值的简短版本。例如:

1h:20m
2d:20h 
2mo:12d 
5y:2mo
我搜索了一下,似乎C#没有一个内置函数来满足我的需要

所以我决定写我自己的,但我被所有部分的正确格式难住了。例如,我可能会得到一个字符串,比如“1d:24h”,或者对于一个简单的2个月,我可能会得到“1mo:29d”


注:我遇到的问题是如何定义一个月和一年中有多少天。

日期时间是一项令人讨厌的任务

由于没有迹象表明你指的是哪几个月,根据给定的信息,这是不可能的。月份可以有28天、29天、30天和31天,具体取决于您考虑的月份/年份

如果没有关于你正在处理的月份的指示,那么从1个月到2个月的转换将是关于你在哪一天进行转换的随机猜测。您必须添加更多的传入参数来说明这一点,或者向用户解释一个月被视为x天,并且只有x天


另一件需要考虑的事情是夏时制。下午1点+24小时可能不是第二天下午1点。在这种情况下,你或最终用户可能会考虑这样的日子23小时=1D或25H=1D。< /P>是的,确切地说。这就是我一直在处理的问题。你看,我的任务是做一个简短的表示,显示持续时间(与日历月/年无关)。例如,任务运行时间:1d:3h。那么什么是公认的方法呢?而且,我认为这种格式对最终用户没有任何好处,你可能需要单独解释什么是什么意思。如果你只需要显示持续时间,你需要时间戳,以分钟为单位显示值(如果是你的最小单位),在客户端有单独的标签(或跨度等)使用附加的文本(如月、日、小时、分钟),计算时间戳值,如果这些标签的值大于0,则显示这些标签。我的意思是,基本上不用格式化它们,而是用单独的变量/控件来显示这些值。如果你只是收到任意数量的天或小时等,而没有直接的数据来源,那么你可以做的就是猜测。你必须回到给你这个规范的人那里,告诉他这个规范在当前状态下没有意义。但是,如果你收到一个日期和具体的时间来运行计算,那么这就行了。询问一个好的假设是否是在程序运行时从实例计算它。这对最终用户来说可能是最有逻辑意义的,但是它将根据运行时间向同一用户输入返回不同的结果。