检测是一个时间串或一个数字串是否连续

 private static int Getcount(bool distinct, DateTime[] timeList, DateTime end, TimeSpan ts)
        {
            var datemark = end;
            int count = 0;
            for (int i = 0; i < timeList.Length; i++)
            {
                var curdate = timeList[i];

                if (curdate > end)
                {
                    //在范围外
                    continue;
                }

                if (i == 0)
                {
                    if (curdate < end.Subtract(ts))
                        return 0;
                }
                if (curdate > datemark.Subtract(ts) && curdate <= datemark)
                {
                    //如果取唯一值,这里只会执行一次
                    if (!distinct)
                        count++;
                    if (distinct && count == 0)
                    {
                        count = 1;
                    }

                    continue;
                }
                else if (curdate > datemark.Subtract(ts).Subtract(ts)
                         && curdate <= datemark.Subtract(ts))
                {
                    //步进一刻度
                    datemark = datemark.Subtract(ts);
                    count++;
                    continue;
                }
                //能到这里已经连续
                return count;
            }

            return count;
        }




        [TestMethod]
        public void MyTestMethod_Count()
        {

            var reader = new[]
                             {
                                 DateTime.Parse("2012-1-6 1:0:0"),
                                 DateTime.Parse("2012-1-5 1:0:0"),
                                 DateTime.Parse("2012-1-4 1:0:0"),
                                    //DateTime.Parse("2012-1-4 2:0:0"),
                                 DateTime.Parse("2012-1-3 1:0:0"),
                                 //DateTime.Parse("2012-1-2 1:0:0"),
                                 DateTime.Parse("2012-1-1 1:0:0")
                             };

            //Console.WriteLine(Getcount(true, reader));

            Assert.AreEqual(4, Getcount(false, reader));
        }


        [TestMethod]
        public void MyTestMethod_Distinct_Count()
        {

            var reader = new[]
                             {
                                 DateTime.Parse("2012-1-6 1:0:0"),
                                 DateTime.Parse("2012-1-5 1:0:0"),
                                 DateTime.Parse("2012-1-4 1:0:0"),
                                  DateTime.Parse("2012-1-4 2:0:0"),
                                  DateTime.Parse("2012-1-4 2:0:0"),
                                    DateTime.Parse("2012-1-4 2:0:0"),
                                 DateTime.Parse("2012-1-3 1:0:0"),
                                 //DateTime.Parse("2012-1-2 1:0:0"),
                                 DateTime.Parse("2012-1-1 1:0:0")
                             };

            //Console.WriteLine(Getcount(true, reader));

            Assert.AreEqual(4, Getcount(true, reader));
        }



        [TestMethod]
        public void MyTestMethod_distinct()
        {
            var reader = new[]
                             {
                                  DateTime.Parse("2012-1-8 2:0:0"),
                                  DateTime.Parse("2012-1-7 2:0:0"),
                                  DateTime.Parse("2012-1-6 2:0:0"),
                                 DateTime.Parse("2012-1-6 1:0:0"),
                                 DateTime.Parse("2012-1-5 1:0:0"),
                                 DateTime.Parse("2012-1-4 1:0:0"),
                                 DateTime.Parse("2012-1-4 2:0:0"),
                                 DateTime.Parse("2012-1-3 1:0:0"),
                                 //DateTime.Parse("2012-1-2 1:0:0"),
                                 DateTime.Parse("2012-1-1 1:0:0")
                             };

            Assert.AreEqual(4, Getcount(true, reader));
        }

        [TestMethod]
        public void MyTestMethod_0()
        {
            var reader = new DateTime[]
                             {
                                 // DateTime.Parse("2012-1-6 2:0:0"),
                                 //DateTime.Parse("2012-1-6 1:0:0"),
                                 //DateTime.Parse("2012-1-5 1:0:0"),
                                 //DateTime.Parse("2012-1-4 1:0:0"),
                                 //DateTime.Parse("2012-1-4 2:0:0"),
                                 //DateTime.Parse("2012-1-3 1:0:0"),
                                 ////DateTime.Parse("2012-1-2 1:0:0"),
                                 //DateTime.Parse("2012-1-1 1:0:0")
                             };

            Assert.AreEqual(0, Getcount(true, reader));
        }




        [TestMethod]
        public void MyTestMethod_all()
        {
            MyTestMethod_Count();
            MyTestMethod_distinct();
            MyTestMethod_0();
        }




        private static int Getcount(bool distinct, DateTime[] reader)
        {
            var seconds = 24 * 60 * 60;
            var end = DateTime.Parse("2012-1-7 0:0:0");
            TimeSpan ts = new TimeSpan(0, 0, seconds);
            return Getcount(distinct, reader, end, ts);
        }
posted @ 2013-05-29 10:56  张保维  阅读(162)  评论(0编辑  收藏  举报