Способы форматирования времени / продолжительности в C# с использованием короткой версии

Я ищу способ отформатировать продолжительность времени, первоначально выраженную в часах (в виде двойной переменной) для веб-приложения ASP.NET, написанного на C#. Мне нужна короткая версия, которая имеет только 2 значимых значения. Например:

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

Я искал, и кажется, что C# не имеет встроенной функции для того, что мне нужно.

Поэтому я решил написать свой, но я озадачен правильным форматированием всех частей. Например, я могу получить строку, например "1d:24h", или в течение двух простых месяцев я могу получить "1mo: 29d"

PS. Проблема, с которой я столкнулся, заключается в определении количества дней в месяце и в году.

1 ответ

Решение

DateTime's известны тем, что были раздражающей задачей.

Поскольку нет никаких указаний относительно того, на какие месяцы вы ссылаетесь, с данной информацией это было бы невозможно. Месяцы могут иметь 28, 29, 30 и 31 день в зависимости от того, какой месяц / год вы принимаете во внимание.

Без указания того, с какими месяцами вы имеете дело, переход от 1 до 2 месяцев будет случайным предположением относительно того, в какой день вы выполняете переход. Вам придется либо добавить дополнительные входящие параметры, чтобы объяснить это, либо объяснить пользователю, что месяц считается x днями и только x днями.

Другая вещь, чтобы рассмотреть, была бы летняя экономия. 13:00 + 24 часа не может быть 13:00 на следующий день. В таких обстоятельствах с вами или конечным пользователем может потребоваться рассмотреть такие дни 23h=1d или 25h=1d.

Другие вопросы по тегам