将DateTime (TimePart)转换为可读的基于一天小时的日、小时和分钟

本文关键字:小时 DateTime 一天 分钟 转换 TimePart 于一天 | 更新日期: 2023-09-27 18:10:08

我有一个c#代码,我需要用DateTime格式累加所有的小时。

我有一个foreach语句,用于计算待处理的小时数,但待处理的小时数需要累积,所以最后我总共有小时和分钟,根据一天的限制小时数,例如,我的一天可能是8小时,然后我可以将其格式化为字符串,如以下示例:

如果我的总时间是:24小时31分钟,那么基于8小时的一天,我应该格式化如下:

3 days, 31 minutes.

我需要知道积累时间的最佳方法,下面是我foreach中的代码:

// here I create a Timespan in order to get hours and minutes from a DB.
 var timeSpan = TimeSpan.FromHours(double.Parse(drItem["PayableHours"].ToString()));
                            int hh = timeSpan.Hours;
                            int mm = timeSpan.Minutes;
                            int ss = timeSpan.Seconds;

                            // pending hours
// here i create a tempHours variable for a 8 hour 
                            DateTime tempHours = new DateTime(1900, 1, 1, 8, 0, 0);
// here I substract from my 8 hour datetime the hours and the minutes of my timespan
                            DateTime pendingHours = dayHours.Add(new TimeSpan(-hh,-mm,0));
// here i should accumulate the pendingHours so when the foreach statement finish I can format the total hours and minutes to string.

什么线索吗?

将DateTime (TimePart)转换为可读的基于一天小时的日、小时和分钟

根据我的理解,它看起来像这样:

private static string PrettyPrint(TimeSpan timeSpan)
{
    var parts = new List<string>();
    int totalHours = (int)timeSpan.TotalHours;
    int workDays = totalHours / 8;
    int remainingHours = (int)timeSpan.TotalHours - 8 * workDays;
    if (workDays == 1) parts.Add("1 day");
    if (workDays > 1) parts.Add(workDays + " days");
    if (remainingHours == 1) parts.Add("1 hour");
    if (remainingHours > 1) parts.Add(timeSpan.Hours + " hours");
    if (timeSpan.Minutes == 1) parts.Add("1 minute");
    if (timeSpan.Minutes > 1) parts.Add(timeSpan.Minutes + " minutes");
    return string.Join(", ", parts);
}

您可能还需要添加一些代码来检查TimeSpan.Zero

如果我理解正确的话,那么:

int numberDays = hh / 8;

会给出天数。从这里开始,剩下的就很容易了。