type.GetFields() 获取不到,改用type.DeclaredFields

文章详细描述了一个名为`StatisticQuery`的类中,如何根据给定的字段值计算同比开始日期(TB)和环比开始日期(HB),涉及日期处理和条件判断以适应不同年度和月份的情况。
摘要由CSDN通过智能技术生成

 StatisticQuery 类

 private Dictionary<string, DateTime> GetTBHBDate(StatisticQuery model, string field)
        {
            Dictionary<string, DateTime> dic = new Dictionary<string, DateTime>();
            DateTime TB = new DateTime();//同比开始日期 (年)
            DateTime HB = new DateTime();//环比开始日期 (月)

            DateTime fieldValue = new DateTime();
            Type type = typeof(StatisticQuery);
            // 根据字段名称获取 FieldInfo 对象
            //FieldInfo fileinfo= type.GetField(field, BindingFlags.Instance | BindingFlags.NonPublic);
            var fieldInfos = (System.Reflection.FieldInfo[])((System.Reflection.TypeInfo)type).DeclaredFields;
            foreach (FieldInfo f in fieldInfos) {
                if (f.Name.Contains(field) && !f.Name.Contains("1")) {
                    // 获取字段值
                    fieldValue = (DateTime)f.GetValue(model);
                    continue;
                }
            }

            int daysInCurrentMonth = DateTime.DaysInMonth(fieldValue.Year, fieldValue.Month); // 获取查询日期当前月份的天数
            bool isLastDayOfMonth = (daysInCurrentMonth == fieldValue.Day); // 判断查询日期是否为月末最后一天
            if (!string.IsNullOrEmpty(model.setTime))//是否任意年度
            {
                //判断任意年度当月日期是否最后一天
                int daysInRandomMonth = DateTime.DaysInMonth(Convert.ToDateTime(fieldValue.ToString("" + model.setTime + "-MM-01")).Year, Convert.ToDateTime(fieldValue.ToString("" + model.setTime + "-MM-01")).Month);
                bool isLastDayOfMonthRandom = (daysInRandomMonth == Convert.ToDateTime(fieldValue.ToString("" + model.setTime + "-MM-01")).Day);
                if (isLastDayOfMonth && !isLastDayOfMonthRandom)
                {
                    //不是最后一天就改为最后一天
                    TB = Convert.ToDateTime(fieldValue.ToString("" + model.setTime + "-MM-01")).AddMonths(1).AddDays(-1);
                }
                else { TB = Convert.ToDateTime(fieldValue.ToString("" + model.setTime + "-MM-dd")); }


                daysInRandomMonth = DateTime.DaysInMonth(Convert.ToDateTime(fieldValue.AddMonths(-1).ToString("" + model.setTime + "-MM-01")).Year, Convert.ToDateTime(fieldValue.AddMonths(-1).ToString("" + model.setTime + "-MM-01")).Month);
                isLastDayOfMonthRandom = (daysInRandomMonth == Convert.ToDateTime(fieldValue.AddMonths(-1).ToString("" + model.setTime + "-MM-01")).Day);
                if (isLastDayOfMonth && !isLastDayOfMonthRandom)
                {
                    //不是最后一天就改为最后一天
                    HB = Convert.ToDateTime(fieldValue.AddMonths(-1).ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1);
                }
                else { HB = Convert.ToDateTime(fieldValue.AddMonths(-1)); }

            }
            else
            {
                //上一年度
                int daysInLastMonth = DateTime.DaysInMonth(fieldValue.AddYears(-1).Year, fieldValue.AddYears(-1).Month); // 获取当前月份的天数
                bool isLastDayOfLastMonth = (daysInLastMonth == fieldValue.AddYears(-1).Day); // 判断是否为月末最后一天
                if (isLastDayOfMonth && !isLastDayOfLastMonth)
                {
                    //不是最后一天就改为最后一天
                    TB = Convert.ToDateTime(fieldValue.AddYears(-1).ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1);
                }
                else
                {
                    TB = Convert.ToDateTime(fieldValue.AddYears(-1));
                }


                daysInLastMonth = DateTime.DaysInMonth(fieldValue.AddMonths(-1).Year, fieldValue.AddMonths(-1).Month); // 获取当前月份的天数
                isLastDayOfLastMonth = (daysInLastMonth == fieldValue.AddMonths(-1).Day); // 判断是否为月末最后一天
                if (isLastDayOfMonth && !isLastDayOfLastMonth)
                {
                    //不是最后一天就改为最后一天
                    HB = Convert.ToDateTime(fieldValue.AddMonths(-1).ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1);
                }
                else
                {
                    HB = Convert.ToDateTime(fieldValue.AddMonths(-1));
                }
            }
            dic.Add("TB", TB);
            dic.Add("HB", HB);
            return dic;
        }

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值