How to check if a DateTime range is within another 3 month DateTime range

后端 未结 5 1872
长情又很酷
长情又很酷 2021-01-12 08:37

Hi I have a Start Date and End Date per record in a db.

I need to check to see where the time period falls in a 2 year period broken into two lots of quarters then d

5条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-12 09:32

    If you want to compare two dates you should find out the first day of the quarter corresponds every of this dates, then you can compare this two dates:

    using System;
    
    namespace DataTime {
        class Program {
            static int GetQuarter (DateTime dt) {
                int Month = dt.Month;   // from 1 to 12
                return Month / 3 + 1;
            }
            static DateTime GetQuarterFirstDay (DateTime dt) {
                int monthsOfTheFirstDayOfQuarter = (GetQuarter (dt) - 1) * 3 + 1;
                return new DateTime(dt.Year, monthsOfTheFirstDayOfQuarter, 1);
                // it can be changed to
                //  return new DateTime(dt.Year, (dt.Month/3)*3 + 1, 1);
            }
            static void Main (string[] args) {
                DateTime dt1 = new DateTime (2009, 6, 9),
                         dt2 = new DateTime (2009, 7, 9),
                         dt3 = new DateTime (2009, 8, 9),
                         dt4 = new DateTime (2009, 8, 9);
    
                Console.WriteLine ("dt1={0}", dt1.AddMonths (1));
                Console.WriteLine ("dt2={0}", dt2.AddMonths (1));
                Console.WriteLine ("dt3={0}", dt3.AddMonths (1));
    
                DateTime startDate = DateTime.Now,
                         endDate1 = startDate.AddMonths(24).AddDays(1),
                         endDate2 = startDate.AddMonths(24).AddDays(-1),
                         endDate3 = startDate.AddMonths(28);
                Console.WriteLine ("Now we have={0}", startDate);
                Console.WriteLine ("endDate1={0}", endDate1);
                Console.WriteLine ("endDate2={0}", endDate2);
                Console.WriteLine ("endDate3={0}", endDate3);
    
                Console.WriteLine ("GetQuarterFirstDay(startDate)={0}", GetQuarterFirstDay (startDate));
                Console.WriteLine ("GetQuarterFirstDay(endDate1)={0}", GetQuarterFirstDay (endDate1));
                Console.WriteLine ("GetQuarterFirstDay(endDate2)={0}", GetQuarterFirstDay (endDate2));
                Console.WriteLine ("GetQuarterFirstDay(endDate3)={0}", GetQuarterFirstDay (endDate3));
                if (DateTime.Compare (GetQuarterFirstDay (endDate2), GetQuarterFirstDay (startDate).AddMonths (24)) > 0)
                    Console.WriteLine ("> 2 Yeas");
                else
                    Console.WriteLine ("<= 2 Yeas");
                if (DateTime.Compare (GetQuarterFirstDay (endDate3), GetQuarterFirstDay (startDate).AddMonths (24)) > 0)
                    Console.WriteLine ("> 2 Yeas");
                else
                    Console.WriteLine ("<= 2 Yeas");
            }
        }
    }
    

    produce

    dt1=09.07.2009 00:00:00
    dt2=09.08.2009 00:00:00
    dt3=09.09.2009 00:00:00
    Now we have=22.04.2010 11:21:45
    endDate1=23.04.2012 11:21:45
    endDate2=21.04.2012 11:21:45
    endDate3=22.08.2012 11:21:45
    GetQuarterFirstDay(startDate)=01.04.2010 00:00:00
    GetQuarterFirstDay(endDate1)=01.04.2012 00:00:00
    GetQuarterFirstDay(endDate2)=01.04.2012 00:00:00
    GetQuarterFirstDay(endDate3)=01.07.2012 00:00:00
    <= 2 Yeas
    > 2 Yeas
    

    EDITED: I fixed an error from the first version. Now it should works correct.

提交回复
热议问题