【发布时间】:2019-05-24 07:58:30
【问题描述】:
我需要根据与这些天数相关的数字来制定一种显示连续术语的方法。
所以,我为每一天(学期)设定一个具体数字。
周日 = 1,周一 = 2,周二 = 4,周三 = 8,周四 = 16,周五 = 32,周六 = 64
如果用户选择了所有工作日,例如周一 - 周五 = 62, 或周末周六 - 周日 = 65。
我必须启动该方法以显示该学期中每周的那些日子。
在日历中显示术语的当前代码
var terminDates = dataAccess.GetTerminDate(personal.LPE_Nr, date, DateTime.DaysInMonth(date.Year, date.Month));
for (int i = 0; i < terminDates.Count; i++)
{
T_TERMINE _TERMINE = new T_TERMINE();
List<T_TERMINE> terminList = dataAccess.GetListTermins(personal.LPE_Nr, terminDates[i]);
string serId = null;
foreach (var termin in terminList)
{
_TERMINE.TER_Betreff = termin.TER_Betreff;
_TERMINE.TER_ID = termin.TER_ID;
serId = termin.TER_TRS_ID;
}
List<T_TERMINSERIE> serieTermins = dataAccess.GetSerieTermins(serId);
T_TERMINSERIE _TERMINSERIE = new T_TERMINSERIE();
foreach (var ser_termin in serieTermins)
{
_TERMINSERIE.TRS_StartZeit = ser_termin.TRS_StartZeit;
_TERMINSERIE.TRS_EndZeit = ser_termin.TRS_EndZeit;
_TERMINSERIE.TRS_TagWoche = ser_termin.TRS_TagWoche; //(16)here I get the number of the bit of the mask
_TERMINSERIE.TRS_StartDatum = ser_termin.TRS_StartDatum;
}
/* how now to include method to make that custom event appear
whenever the method renders, me now CustomEvent is only
displayed for the first time, how to include it and Event for each time the method finds that day in a single week?*/
//FindNextDay()?
CustomEvent ce = new CustomEvent() { IgnoreTimeComponent = true,
Date = terminDates[i],
EventText = _TERMINE.TER_Betreff,
EventColor = Color.BlueViolet };
if (!generatedEvents.Any(x => x.Date == ce.Date))
{
calendar1.AddEvent(ce);
generatedEvents.Add(ce);
}
}
现在最重要的是基于我将从基数读取的数字的方法,我的意思是枚举中的数字。 每周重复此学期。
[Flags]
enum DaysBitMask { Sun = 1, Mon = 2, Tues = 4, Wed = 8, Thu = 16, Fri = 32, Sat = 64 }
static DayOfWeek FindNextDay(DaysBitMask mask, DayOfWeek currentDay)
{
DayOfWeek dayCursor = currentDay;
int counter = 0;
do
{
int cursorMask = 0x01 << (int)dayCursor;
int operationResult = (cursorMask & (int)mask);
if (operationResult > 0)
return dayCursor;
dayCursor = (DayOfWeek)(((int)dayCursor + 1) % 7);
counter++;
}
while (counter < 7);
throw new InvalidOperationException("Wrong flow. We shouldn't be here");
}
这是我目前设计的代码,它不起作用,如果您可以更正我的方法“FindNextDay”并告诉我如何应用它以正确显示术语。谢谢大家的时间。
【问题讨论】:
-
你
FindNextDay方法有什么问题? -
@RomanKoliada 对,我要在这一天找到一周
-
我不太清楚
FindNextDay的用途;你能举出期望的输入和输出的例子吗? -
@steve16351 我希望如果该术语设置为星期四 9.05,(daysBit 掩码(星期四 = 16)),我想在 16.05、23.05 重复它..
-
抱歉,我还是不明白 - 你将
currentDay传递为DayOfWeek,但是你怎么能从中分辨出“下周四” - 它不应该是 @987654327 @?
标签: c#