Timespan-Day如何才能持续8小时?

我已经保存了几分钟的持续时间,并希望输出“1天5小时30分钟”。 目前我将分钟添加到Timespan并执行以下操作:

TimeSpan ts = new TimeSpan(0,0,1800, 0); Response.Write(ts.Days + "day(s) " + ts.Hours + " hour(s)" + ts.Minutes + " minutes"); 

但现在我只对一天的工作时间感兴趣。 因此,当TimeSpan的持续时间为27小时时,它不应创建输出“1天3小时”。 我想要“3天3小时”。

使用Timespan对象可能有一种简单的方法吗? 是否可以更改TimeSpan的默认行为? 或者我是否必须编写自己的自定义Timespan-Class?

谢谢cpt.oneeye

你能简单地使用:

 (int)(ts.TotalHours / 8) 

而不是ts.Days ? 然后用

 (((int)ts.TotalHours) % 8) 

而不是ts.Hours

你需要实现这样的事情:

 TimeSpan workday = new TimeSpan(8, 0, 0); int workdays = ts.Ticks / workday.Ticks TimeSpan rest = new TimeSpan(ts.Ticks % workday.Ticks) Response.Write(workdays + "workday(s) and" + rest.ToString()); 

会写类似的东西

 "3 workday(s) and 3:32" 

这是我需要它的代码。

DynamicTimeSpan级:

 using System; using System.Text; namespace fooLib { ///  /// Timespan where you can define the number of hours a day can last (+ days of week). /// Optimal for calculating bussinesshours. ///  public class DynamicTimeSpan { private int _hoursPerDay = 8; private int _daysPerWeek = 5; private int _totalMinutes = 0; public int HoursPerDay { get { return _hoursPerDay; } set { _hoursPerDay = value; } } public int DaysPerWeek { get { return _daysPerWeek; } set { _daysPerWeek = value; } } public int Weeks { get { return (int)(((_totalMinutes / 60) / this.HoursPerDay) / this.DaysPerWeek); } } public int Days { get { return (int)((decimal)TotalDays - (decimal)(Weeks * this.DaysPerWeek)); } } public int Hours { get { return (int)((decimal)TotalHours - (decimal)(Weeks * this.DaysPerWeek * this.HoursPerDay) - (decimal)(Days * this.HoursPerDay)); } } public int Minutes { get { return _totalMinutes - (Weeks * this.DaysPerWeek * this.HoursPerDay * 60) - (Days * this.HoursPerDay * 60) - (Hours * 60); } } public decimal TotalDays { get { return (decimal)_totalMinutes / (decimal)60 / (decimal)this.HoursPerDay; } } public decimal TotalHours { get { return (decimal)_totalMinutes / (decimal)60; } } public int TotalMinutes { get { return _totalMinutes; } } public static DynamicTimeSpan operator +(DynamicTimeSpan ts1, DynamicTimeSpan ts2) { return new DynamicTimeSpan(ts1._totalMinutes + ts2._totalMinutes); } public static DynamicTimeSpan operator -(DynamicTimeSpan ts1, DynamicTimeSpan ts2) { return new DynamicTimeSpan(ts1._totalMinutes - ts2._totalMinutes); } public DynamicTimeSpan() { } public DynamicTimeSpan(int totalMinutes) { _totalMinutes = totalMinutes; } public DynamicTimeSpan(int weeks, int days, int hours, int minutes) { _totalMinutes = (weeks * this.DaysPerWeek * this.HoursPerDay * 60) + (days * this.HoursPerDay * 60) + (hours * 60) + minutes; } ///  /// "1 week 2 days 4 hours 30 minutes" ///  ///  public override string ToString() { string str = ""; if (this.Weeks == 1) { str += this.Weeks + " week "; } else if (this.Weeks > 1) { str += this.Weeks + " weeks "; } if (this.Days == 1) { str += this.Days + " day "; } else if (this.Days > 1) { str += this.Days + " days "; } if (this.Hours == 1) { str += this.Hours + " hour "; } else if (this.Hours > 1) { str += this.Hours + " hours "; } // only write minutes when the duration is lower than one day if (this.Weeks == 0 && this.Days == 0 && this.Minutes > 0) { str += this.Minutes + " minutes"; } return str; } } }