已某个时间单位(日月周年)来分割时间段

       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;
        }

原文地址:https://www.cnblogs.com/ink-heart/p/8134023.html

时间: 2024-10-11 05:34:17

已某个时间单位(日月周年)来分割时间段的相关文章

时间单位换算

时间单位 秒. 毫秒(ms).微秒 (μs). 纳秒(ns). 皮秒(ps). 飞秒(fs).阿秒.渺秒 1 s = 10^3 ms = 10^6 us = 10^9 ns = 10^12 ps = 10^15 fs=10^18阿秒=10^21渺秒=10^43普朗克常数 毫秒 毫秒是一种较为微小的时间单位,是一秒的千分之一.典型照相机的最短曝光时间为一毫秒.一只家蝇每三毫秒扇一次翅膀:蚊子二十毫秒振翅一次:蜜蜂则每五毫秒扇一次.由于月亮绕地球的轨道逐渐变宽,它绕一圈所需的时间每年长两毫秒.在计算

时间单位的档案

时间单位的档案 2011-09-14 10:33:20 分类: C/C++ 编辑: 李瑛 撰文/David Labrader [崔琳琳/译 曾少立/校]时间的单位可以从极小到极大,下面的描述是想传达一种超大时间跨度的感受.一渺秒(十亿分之一秒的十亿分之一)科学家是用渺秒来对瞬时事件进行计时的.研究人员已经用稳定的高速激光产生了仅持续250渺秒的光脉冲.尽管这一时间间隔短得无法想像,但是和普朗克常数相比还是很长的.普朗克常数大约为10-43秒,被认为是可能持续的最短时间.一飞秒(十亿分之一秒的百万

智能合约语言 Solidity 教程系列7 - 以太单位及时间单位

这是Solidity教程系列文章第7篇介绍以太单位及时间单位,系列带你全面深入理解Solidity语言.Solidity 系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以太坊是什么 货币单位(Ether Units) 一个数字常量(字面量)后面跟随一个后缀wei, finney,szabo或ether,这个后缀就是货币单位.不同的单位可以转换.不含任何后缀的默认单位是

放心嗨!Android 9 Pie发布,网易云易盾加固已第一时间适配

自5月份谷歌在年度开发者大会上首次亮相Android 9 P后,其正式版Android 9 Pie昨天正式发布,网易云易盾移动安全已在昨天第一时间里进行了最终适配. 早在今年初,易盾就做好了相关的准备工作.在谷歌Android P开发者预览版发布不久后,易盾的安全工程师就完成了加固等方面的测试. 在正式版Android 9 Pie推出前,作为谷歌的合作伙伴,易盾不断与谷歌的工程师紧密沟通,压测可能潜在的问题.同时,易盾积极参与了行业内Android P相关的专项活动,不断完善自己的解决方案. 整

数据库已有时间索引,想再添加ID索引

将时间索引的代码复制进去后,将编辑框的变量改为m_QueryID. 准备先以时间索引查找出大概数据,再直接使用ID索引精确查找. 于是想直接精确查ID为105的数据信息. 出现错误: 发现错误原因是忘了改SQL语句:原来查的是时间,现在查的是id,所以应该查找id 依时间查找改为依ID查找: 可以发现列表框里的信息可以显示,而数据库里的图片不能显示出来. 原因: 为了查询出所有符合条件的数据信息在列表框中显示. 在循环语句中加入了m_pRecordset->MoveNext(); 错误解决: 加

为什么LTE系统的最小时间单位是Ts?

之前一直在做LTE物理层相关的工作,一直有个疑惑, 在36.211开头的一章定义Ts的大小是1/(15000*2048)s,为什么定义这么一个奇怪的unit time. 最近才反应过来,这跟FFT/IFFT过程相关. 假设20MHz带宽,标准规定我们用2048点做FFT过程,FFT过程前是时域, 每个时域symbol有2048个时域sample, FFT后,变换成频域的2048个sample, 具体过程如下: 一个时域symbol是1/(14*1000)s, 那么我们物理层的采样速率是2048*

频率 时间 单位转换

频率(f): 赫兹(Hz).   千赫兹(KHz). = 10^3 Hz = 1000 Hz兆赫兹(MHz). = 10^6 Hz = 1000 000 Hz吉赫兹(GHz). = 10^9 Hz = 1000 000 000 Hz太赫兹(THz). = 10^12 Hz = 1000 000 000 000 Hz拍赫兹(PHz). = 10^15 Hz = 1000 000 000 000 000 Hz艾赫兹(EHz): = 10^18 Hz = 1000 000 000 000 000 00

时间单位转化

# coding:utf-8 import datetime utc_time = datetime.datetime.utcnow() # 北京时间(东八区) bj_time = (datetime.datetime.utcnow() + datetime.timedelta(hours=8)) # 美国密西根时间(西五区) us_time = (datetime.datetime.utcnow() - datetime.timedelta(hours=5)) print bj_time.st

根据已知时间加上数小时,包括小数点

public long getEndTime(Date beginTime,String spendTime){ long endTie = 0; if(spendTime.contains(".")){ long spendTimen = (long) (Double.parseDouble(spendTime)*1000*60*60); endTie = (beginTime.getTime()+spendTimen); }else{ long spendTimen = (long