zoukankan      html  css  js  c++  java
  • 已某个时间单位(日月周年)来分割时间段

           public List<RunningRange> GetRangesByUnit(string unit, DateTime start, DateTime end)
            {
                //根据单位获取时间段的数组 unit:M,W,D
                List<RunningRange> list = new List<RunningRange>();
                //获取两个时间相差的天数
    
                if ((end - start).Seconds < 0)
                {
                    return list;
                }
                //单位日
                if (unit == "D")
                {
                    int days = (end - start).Days;
                    for (int i = 0; i <= days; i++)
                    {
                        RunningRange range = new RunningRange();
                        range.Start = start.AddDays(i);
                        range.End = range.Start.AddDays(1);
                        list.Add(range);
                    }
                }
    
                //单位周
                if (unit == "W")
                {
                    DateTime startWeek = start.AddDays(1 - Convert.ToInt32(start.DayOfWeek.ToString("d")));
                    DateTime endWeek = end.AddDays(1 + (7 - Convert.ToInt32(end.DayOfWeek.ToString("d"))));
                    int weeks = (endWeek - startWeek).Days / 7;
                    for (int i = 0; i <= weeks; i++)
                    {
                        RunningRange range = new RunningRange();
                        DateTime time = start.AddDays(6 * i);
                        range.Start = time.AddDays(1 - Convert.ToInt32(time.DayOfWeek.ToString("d")));
                        range.End = range.Start.AddDays(7);
                        list.Add(range);
                    }
                }
    
                //单位月
                if (unit == "M")
                {
                    DateTime startMonth = start.AddDays(1 - start.Day);
                    DateTime endMonth = end.AddDays(DateTime.DaysInMonth(end.Year, end.Month) - end.Month);
                    int days = (endMonth - startMonth).Days;
                    int MonthDays = 0;
                    while (true)
                    {
                        DateTime tempdate = startMonth;
                        MonthDays = DateTime.DaysInMonth(tempdate.Year, tempdate.Month);
                        RunningRange range = new RunningRange();
                        range.Start = tempdate;
                        range.End = range.Start.AddDays(MonthDays);
                        list.Add(range);
                        days -= MonthDays;
                        if (days <= 0)
                        {
                            break;
                        }
    
                        startMonth = range.End;
                    }
                }
                if (unit == "Y")
                {
                    //获取时间的年的部分
                    int year = start.Year;
                    int yearend = end.Year;
                    for (int i = 0; i <= (yearend - year); i++)
                    {
                        RunningRange range = new RunningRange();
                        range.Start = new DateTime(year + i, 1, 1);
                        range.End = range.Start.AddYears(1);
                        list.Add(range);
                    }
                }
                return list;
            }
  • 相关阅读:
    1305: Substring
    HDU1272 小希的迷宫 并查集
    1213 How Many Tables 简单的并查集问题
    POJ 3090 Visible Lattice Points 欧拉函数
    9.7——模拟赛
    洛谷——P2657 低头一族
    洛谷—— P1204 [USACO1.2]挤牛奶Milking Cows
    9.6——模拟赛
    洛谷—— P1126 机器人搬重物
    前端 自定义format函数
  • 原文地址:https://www.cnblogs.com/ink-heart/p/8134023.html
Copyright © 2011-2022 走看看