我已经保存了几分钟的持续时间,并希望输出“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?
THX cpt.oneeye
答案 0 :(得分:10)
你能简单地使用:
(int)(ts.TotalHours / 8)
而不是ts.Days
?然后使用
(((int)ts.TotalHours) % 8)
而不是ts.Hours
。
答案 1 :(得分:5)
您需要实现以下内容:
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"
答案 2 :(得分:2)
这是我需要它的代码。
DynamicTimeSpan级:
using System;
using System.Text;
namespace fooLib
{
/// <summary>
/// Timespan where you can define the number of hours a day can last (+ days of week).
/// Optimal for calculating bussinesshours.
/// </summary>
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;
}
/// <summary>
/// "1 week 2 days 4 hours 30 minutes"
/// </summary>
/// <returns></returns>
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;
}
}
}