【问题标题】:Ways to format time/duration in C# using short version使用简短版本在 C# 中格式化时间/持续时间的方法
【发布时间】:2012-09-30 21:37:27
【问题描述】:

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

1h:20m
2d:20h 
2mo:12d 
5y:2mo

我搜索了一下,似乎 C# 没有我需要的内置函数。

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

附言。我遇到的问题是定义一个月和一年有多少天。

【问题讨论】:

    标签: c# asp.net timespan duration


    【解决方案1】:

    DateTime 以烦人的任务而闻名。

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

    如果没有说明您正在处理哪些月份,则从 1 个月到 2 个月的翻转将是您在哪一天进行过渡的随机猜测。您要么必须添加更多传入参数来解决此问题,要么向用户解释一个月被视为 x 天且仅 x 天。

    要考虑的另一件事是夏令时。下午 1 点 + 24 小时可能不是第二天下午 1 点。在这种情况下您或最终用户不妨考虑这样的日子 23h=1d 或 25h=1d。

    【讨论】:

    • 是的,完全正确。这就是我一直在处理的。你看,我的任务是做一个简短的表示,显示持续时间(与日历月/年无关)。例如,任务运行时间:1d:3h。那么公认的做法是什么?
    • 另外,我认为这种格式对最终用户没有任何好处,您可能需要单独解释什么是什么。
    • 如果你只需要显示持续时间,你需要时间戳,以分钟为单位的值(如果它是你的最小单位),在客户端有单独的标签(或跨度等)附加像月、日、小时、分钟这样的文本,计算时间戳值并显示这些标签,如果它们的值大于 0。我的意思是基本上不是格式化它们,而是使用单独的变量/控件来显示这些值。
    • 如果您只是收到任意天数或小时数等,而没有直接来源的天数代表什么,您可以做的最好的就是猜测。你必须回到给你这个规范的人那里,告诉他在目前的状态下它没有意义。
    • 如果您收到运行计算的日期和特定时间,那么这将起作用。询问是否一个好的假设是在程序运行时从实例计算它。这对最终用户来说可能是最合乎逻辑的,但是它会根据运行时间向相同的用户输入返回不同的结果。
    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2023-03-07
    相关资源
    最近更新 更多