我有一张存储日常活动的表格,例如“早上会议”。这些活动在每周的一天或多天中在白天的不同时间进行。我需要一种算法来产生活动时间的“好”描述。目前,我正在使用这种数据结构:
public class DailyActivityTime
{
public int WeeklyActivityTimeId { get; set; }
public bool Sunday { get; set; }
public string SundayStartTime { get; set; }
public string SundayEndTime { get; set; }
public bool Monday { get; set; }
public string MondayStartTime { get; set; }
public string MondayEndTime { get; set; }
public bool Tuesday { get; set; }
public string TuesdayStartTime { get; set; }
public string TuesdayEndTime { get; set; }
public bool Wednesday { get; set; }
public string WednesdayStartTime { get; set; }
public string WednesdayEndTime { get; set; }
public bool Thursday { get; set; }
public string ThursdayStartTime { get; set; }
public string ThursdayEndTime { get; set; }
public bool Friday { get; set; }
public string FridayStartTime { get; set; }
public string FridayEndTime { get; set; }
public bool Saturday { get; set; }
public string SaturdayStartTime { get; set; }
public string SaturdayEndTime { get; set; }
public bool Biweekly { get; set; }
public string DisplayText { get; set; }
}
Start
和End
次作为TIME
数据类型保存到SQL Server(2008 R2)(因此作为TimeSpan
进入C#代码), bool
属性当然是BIT
。我想在DailyActivityTime
类本身的C#中编写转换为描述的代码,无论是在构造函数中还是在DisplayText
属性getter中。
因此,举例来说,早晨会议活动如下:
Monday: 10:00-10:30AM
Tuesday: 10:00-10:30AM
Wednesday: 10:00-10:30AM
Thursday: 10:00-10:30AM
Friday: 10:00-10:30AM
Saturday: 5:00-6:00PM
Sunday: 5:00-6:00PM
我需要将此示例显示为:
Mon-Fri 10:00-10:30 AM, Sat & Sun 5:00-6:00 PM
一些基本事实:
Mon, Wed, Fri 1:00-1:30 PM
。Biweekly
的活动将显示为“每隔一个......”,并且每周不会超过一天,例如Every other Thurs 3:00-3:45 PM
。我很确定我可以通过为一周中的每一天分配一个整数序列然后比较时间来解决这个问题,但似乎可能有更好的算法,可能使用TimeSpan
结构体。有人有主意吗?
答案 0 :(得分:2)
Time Period库可以帮助您解决这个问题
答案 1 :(得分:1)
我认为如果您每天维护一个类,在您的类中有一组数组,并使用索引器来访问它们,您会发现您的代码更容易使用:
public class ActivityDay
{
public bool Active { get; set; }
public string StartTime { get; set; }
public string EndTime { get; set; }
}
public class DailyActivityTime
{
public int WeeklyActivityTimeId { get; set; }
public bool Biweekly { get; set; }
public string DisplayText { get; set; }
private ActivityDay[] _days = new ActivityDay[7];
public ActivityDay this[int day]
{
get { return _days[day]; }
set { _days[day] = value; }
}
}
因此Sunday
变为foo[0]
,Monday
为foo[1]
等。想想看,您可以使用DayOfWeek enumeration作为索引。< / p>
你可以使ActivityDay
成为一个结构,但是你会遇到相当不方便的值语义。