将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.
什么线索吗?
根据我的理解,它看起来像这样:
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;
会给出天数。从这里开始,剩下的就很容易了。