public FestivalInfo Clone() { FestivalInfo md = new FestivalInfo(type, isChineseFestival, desc, calcType, timeInfo); md.date = new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, date.Millisecond); return(md); }
public DateTime getFestival(int year, FestivalType type) { DateTime date = DateTime.Now; if (!mapFestivalCalcInfo.ContainsKey(type)) { return(date); } FestivalInfo clacInfo = mapFestivalCalcInfo[type]; if (clacInfo.isChineseFestival) { //农历节日 switch (clacInfo.calcType) { case FestivalCalcType.MonthLastDay: { //某月最后一天 int.TryParse(clacInfo.timeInfo, out int month); if (month == 12) { year += 1; month = 1; } DateTime dtTemp = ChineseDateServer.ins.toDateTime(year, month, 1); dtTemp = dtTemp.AddDays(-1); return(dtTemp); } default: { //指定日期 string[] arr = clacInfo.timeInfo.Split('/'); if (arr.Length < 2) { return(date); } int.TryParse(arr[0], out int month); int.TryParse(arr[1], out int day); DateTime dtTemp = ChineseDateServer.ins.toDateTime(year, month, day); return(dtTemp); } } } else { //阳历节日 switch (clacInfo.calcType) { case FestivalCalcType.Week: { //某月第几个星期几 string[] arr = clacInfo.timeInfo.Split('/'); if (arr.Length < 3) { return(date); } int.TryParse(arr[0], out int month); int.TryParse(arr[1], out int weekCount); int.TryParse(arr[2], out int week); calcWeekFestival(year, month, weekCount, week, out int day); DateTime dtTemp = new DateTime(year, month, day); return(dtTemp); } default: { //指定日期 string[] arr = clacInfo.timeInfo.Split('/'); if (arr.Length < 2) { return(date); } int.TryParse(arr[0], out int month); int.TryParse(arr[1], out int day); DateTime dtTemp = new DateTime(year, month, day); return(dtTemp); } } } }
/// <summary> /// 获取从阳历指定日期开始,接下来一年的节日 /// </summary> /// <param name="date"></param> /// <returns></returns> public List <FestivalInfo> getNextYearFestival(DateTime date) { List <FestivalInfo> rst = new List <FestivalInfo>(); foreach (FestivalType type in mapFestivalCalcInfo.Keys) { FestivalInfo md = mapFestivalCalcInfo[type].Clone(); TimeSpan ts = new TimeSpan(); if (!md.isChineseFestival) { DateTime dtTemp = getFestival(date.Year, type); ts = dtTemp - date; if (ts.TotalDays + 1 < 0) { dtTemp = getFestival(date.Year + 1, type); //md.isFinished = true; ts = dtTemp - date; } md.date = dtTemp; } else { //农历日期和用阳历日期有错位 //为了判断哪些节日已经过去了,需要比较前后三年的日期。 DateTime dtTemp = getFestival(date.Year - 1, type); ts = dtTemp - date; if (ts.TotalDays + 1 < 0) { dtTemp = getFestival(date.Year, type); ts = dtTemp - date; if (ts.TotalDays + 1 < 0) { dtTemp = getFestival(date.Year + 1, type); //md.isFinished = true; ts = dtTemp - date; } } md.date = dtTemp; } //DateTime dtTemp = getFestival(date.Year, type); md.time = md.date.ToString("yyyy/MM/dd"); md.showTime = md.date.ToString("MM/dd"); md.dayOfRange = (int)(ts.TotalDays + 1); md.isFinished = md.date.Year > date.Year; rst.Add(md); } rst.Sort((a, b) => { if (a.time == b.time && a.isChineseFestival != b.isChineseFestival) { return(a.isChineseFestival ? 1 : -1); } return(a.time.CompareTo(b.time)); }); return(rst); }
private void setCalcInfo(FestivalType type, bool isChineseFestival, string desc, FestivalCalcType calcType, string timeInfo) { mapFestivalCalcInfo[type] = new FestivalInfo(type, isChineseFestival, desc, calcType, timeInfo); }