Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
                }
                }
            }
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
 private void setCalcInfo(FestivalType type, bool isChineseFestival, string desc, FestivalCalcType calcType, string timeInfo)
 {
     mapFestivalCalcInfo[type] = new FestivalInfo(type, isChineseFestival, desc, calcType, timeInfo);
 }