• C#有关日期的使用方法


      1 DateTime dt = DateTime.Now;  //当前时间
      2 
      3 DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d")));  //本周周一
      4 DateTime endWeek = startWeek.AddDays(6);  //本周周日
      5 
      6 DateTime startMonth = dt.AddDays(1 - dt.Day);  //本月月初
      7 DateTime endMonth = startMonth.AddMonths(1).AddDays(-1);  //本月月末
      8 DateTime endMonth = startMonth.AddDays((dt.AddMonths(1) - dt).Days - 1);  //本月月末
      9 
     10 DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day);  //本季度初
     11 DateTime endQuarter = startQuarter.AddMonths(3).AddDays(-1);  //本季度末
     12 
     13 DateTime startYear = new DateTime(dt.Year, 1, 1);  //本年年初
     14 DateTime endYear = new DateTime(dt.Year, 12, 31);  //本年年末
     15 至于昨天、明天、上周、上月、上季度、上年度等等,只要AddDays()、AddMonths()、AddYears()这几种方法组合一下就可以了。
     16 
     17 C#中datetime的使用
     18 大家在做报表或查询的时候都会有给用户预设一些可选的日期范围
     19 //如本年度销售额、本季度利润、本月新增客户
     20 //C#里内置的DateTime基本上都可以实现这些功能,巧用DateTime会使你处理这些事来变轻松多了  
     21 //今天
     22 DateTime.Now.Date.ToShortDateString();
     23 //昨天,就是今天的日期减一
     24 DateTime.Now.AddDays(-1).ToShortDateString();
     25 //明天,同理,加一
     26 DateTime.Now.AddDays(1).ToShortDateString(); 
     27 //本周(要知道本周的第一天就得先知道今天是星期几,从而得知本周的第一天就是几天前的那一天,要注意的是这里的每一周是从周日始至周六止
     28 DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
     29 DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
     30 //如果你还不明白,再看一下中文显示星期几的方法就应该懂了
     31 //由于DayOfWeek返回的是数字的星期几,我们要把它转换成汉字方便我们阅读,有些人可能会用switch来一个一个地对照,其实不用那么麻烦的              
     32 string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
     33 Day[Convert.ToInt16(DateTime.Now.DayOfWeek)];
     34 
     35 //上周,同理,一个周是7天,上周就是本周再减去7天,下周也是一样
     36 DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
     37 DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
     38 //下周
     39 DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
     40 DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
     41 //本月,很多人都会说本月的第一天嘛肯定是1号,最后一天就是下个月一号再减一天。当然这是对的
     42 //一般的写法
     43 DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1"; //第一天
     44 DateTime.Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1").AddMonths(1).AddDays(-1).ToShortDateString();//最后一天
     45 
     46 //巧用C#里ToString的字符格式化更简便
     47 DateTime.Now.ToString("yyyy-MM-01");
     48 DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString();
     49 
     50 //上个月,减去一个月份
     51 DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString();
     52 DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
     53 //下个月,加去一个月份
     54 DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString();
     55 DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();
     56 //7天后
     57 DateTime.Now.Date.ToShortDateString();
     58 DateTime.Now.AddDays(7).ToShortDateString();
     59 //7天前
     60 DateTime.Now.AddDays(-7).ToShortDateString();
     61 DateTime.Now.Date.ToShortDateString();
     62 
     63 //本年度,用ToString的字符格式化我们也很容易地算出本年度的第一天和最后一天
     64 DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString();
     65 DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();
     66 //上年度,不用再解释了吧
     67 DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString();
     68 DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToShortDateString();
     69 //下年度
     70 DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString();
     71 DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();
     72 
     73 //本季度,很多人都会觉得这里难点,需要写个长长的过程来判断。其实不用的,我们都知道一年四个季度,一个季度三个月
     74 //首先我们先把日期推到本季度第一个月,然后这个月的第一天就是本季度的第一天了
     75 DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
     76 //同理,本季度的最后一天就是下季度的第一天减一
     77 DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
     78 //下季度,相信你们都知道了。。。。收工
     79 DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
     80 DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
     81 //上季度
     82 DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");
     83 DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
     84 
     85 
     86 --------------------------------
     87 
     88 
     89 DateTime dt = DateTime.Now;
     90 
     91 dt.ToString();//2005-11-5 13:21:25
     92 dt.ToFileTime().ToString();//127756416859912816
     93 dt.ToFileTimeUtc().ToString();//127756704859912816
     94 dt.ToLocalTime().ToString();//2005-11-5 21:21:25
     95 dt.ToLongDateString().ToString();//2005年11月5日
     96 dt.ToLongTimeString().ToString();//13:21:25
     97 dt.ToOADate().ToString();//38661.5565508218
     98 dt.ToShortDateString().ToString();//2005-11-5
     99 dt.ToShortTimeString().ToString();//13:21
    100 dt.ToUniversalTime().ToString();//2005-11-5 5:21:25
    101 dt.Year.ToString();//2005
    102 dt.Date.ToString();//2005-11-5 0:00:00
    103 dt.DayOfWeek.ToString();//Saturday
    104 dt.DayOfYear.ToString();//309
    105 dt.Hour.ToString();//13
    106 dt.Millisecond.ToString();//441
    107 dt.Minute.ToString();//30
    108 dt.Month.ToString();//11
    109 dt.Second.ToString();//28
    110 dt.Ticks.ToString();//632667942284412864
    111 dt.TimeOfDay.ToString();//13:30:28.4412864
    112 dt.ToString();//2005-11-5 13:47:04
    113 dt.AddYears(1).ToString();//2006-11-5 13:47:04
    114 dt.AddDays(1.1).ToString();//2005-11-6 16:11:04
    115 dt.AddHours(1.1).ToString();//2005-11-5 14:53:04
    116 dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04
    117 dt.AddMonths(1).ToString();//2005-12-5 13:47:04
    118 dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05
    119 dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10
    120 dt.AddTicks(1000).ToString();//2005-11-5 13:47:04
    121 dt.CompareTo(dt).ToString();//0
    122 dt.Add(?).ToString();//问号为一个时间段
    123 dt.Equals("2005-11-6 16:11:04").ToString();//False
    124 dt.Equals(dt).ToString();//True
    125 dt.GetHashCode().ToString();//1474088234
    126 dt.GetType().ToString();//System.DateTime
    127 dt.GetTypeCode().ToString();//DateTime
    128    
    129 dt.GetDateTimeFormats('s')[0].ToString();//2005-11-05T14:06:25
    130 dt.GetDateTimeFormats('t')[0].ToString();//14:06
    131 dt.GetDateTimeFormats('y')[0].ToString();//2005年11月
    132 dt.GetDateTimeFormats('D')[0].ToString();//2005年11月5日
    133 dt.GetDateTimeFormats('D')[1].ToString();//2005 11 05
    134 dt.GetDateTimeFormats('D')[2].ToString();//星期六 2005 11 05
    135 dt.GetDateTimeFormats('D')[3].ToString();//星期六 2005年11月5日
    136 dt.GetDateTimeFormats('M')[0].ToString();//11月5日
    137 dt.GetDateTimeFormats('f')[0].ToString();//2005年11月5日 14:06
    138 dt.GetDateTimeFormats('g')[0].ToString();//2005-11-5 14:06
    139 dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT
    140 
    141 string.Format("{0:d}",dt);//2005-11-5
    142 string.Format("{0:D}",dt);//2005年11月5日
    143 string.Format("{0:f}",dt);//2005年11月5日 14:23
    144 string.Format("{0:F}",dt);//2005年11月5日 14:23:23
    145 string.Format("{0:g}",dt);//2005-11-5 14:23
    146 string.Format("{0:G}",dt);//2005-11-5 14:23:23
    147 string.Format("{0:M}",dt);//11月5日
    148 string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT
    149 string.Format("{0:s}",dt);//2005-11-05T14:23:23
    150 string.Format("{0:t}",dt);//14:23
    151 string.Format("{0:T}",dt);//14:23:23
    152 string.Format("{0:u}",dt);//2005-11-05 14:23:23Z
    153 string.Format("{0:U}",dt);//2005年11月5日 6:23:23
    154 string.Format("{0:Y}",dt);//2005年11月
    155 string.Format("{0}",dt);//2005-11-5 14:23:23 
    156 string.Format("{0:yyyyMMddHHmmssffff}",dt);
    157 
    158 
    159 计算2个日期之间的天数差
    160 -----------------------------------------------
    161 DateTime dt1 = Convert.DateTime("2007-8-1");    
    162 DateTime dt2 = Convert.DateTime("2007-8-15");   
    163 TimeSpan span = dt2.Subtract(dt1);              
    164 int dayDiff = span.Days + 1;                  
    165 
    166 计算某年某月的天数
    167 -----------------------------------------------    
    168 int days = DateTime.DaysInMonth(2007, 8);       
    169 days = 31;                                    
    170 
    171 给日期增加一天、减少一天
    172 -----------------------------------------------
    173 DateTime dt =DateTime.Now;
    174 dt.AddDays(1); //增加一天
    175 dt.AddDays(-1);//减少一天
    176 其它年份方法类似...
    177 
    178 Oracle SQL里转换日期函数
    179 -----------------------------------------------
    180 to_date("2007-6-6",'YYYY-MM-DD");
    181 to_date("2007/6/6",'yyyy/mm/dd");
    182 
    183 
    184 如下一组数据,如何查找表里包含9月份的记录:
    185 CGGC_STRATDATE CGGC_ENDDATE
    186 =========================================
    187 2007-8-4 2007-9-5
    188 2007-9-5 2007-9-20
    189 2007-9-22 2007-10-5
    190 
    191 SELECT * FROM TABLE
    192 (TO_DATE('2007/9/1','yyyy/mm/dd') BETWEEN CGGC_STRATDATE
    193 AND CGGC_ENDDATE OR CGGC_STRATDATE >=TO_DATE('2007/9/1','yyyy/mm/dd')
    194 AND CGGC_ENDDATE<=TO_DATE('2007/9/30','yyyy/mm/dd') "
    195 OR TO_DATE('2007/9/30','yyyy/mm/dd') BETWEEN CGGC_STRATDATE
    196 AND CGGC_ENDDATE) ORDER BY CGGC_STRATDATE ASC
    好的代码就和美食一样,都是需要时间烹饪出来的!
  • 相关阅读:
    POJ3159 Candies —— 差分约束 spfa
    POJ1511 Invitation Cards —— 最短路spfa
    POJ1860 Currency Exchange —— spfa求正环
    POJ3259 Wormholes —— spfa求负环
    POJ3660 Cow Contest —— Floyd 传递闭包
    POJ3268 Silver Cow Party —— 最短路
    POJ1797 Heavy Transportation —— 最短路变形
    POJ2253 Frogger —— 最短路变形
    POJ1759 Garland —— 二分
    POJ3685 Matrix —— 二分
  • 原文地址:https://www.cnblogs.com/slmdr9/p/5276420.html
Copyright © 2020-2023  润新知