TimeSpan 結構 表示一個時間間隔。
命名空間:System 程式集:mscorlib(在 mscorlib.dll 中)
說明: 1.DateTime值類型代表了一個從公元0001年1月1日0點0分0秒到公元9999年12月31日23點59分59秒之間的具體日期時刻。是以,你可以用DateTime值類型來描述任何在想象範圍之内的時間。TimeSpan值包含了許多屬性與方法,用于通路或處理一個TimeSpan值,
其中的五個重載方法之一的結構 TimeSpan( int days, int hours, int minutes, int seconds )
下面的清單涵蓋了其中的一部分方法及屬性解釋
Add:與另一個TimeSpan值相加。
Days:傳回用天數計算的TimeSpan值。
Duration:擷取TimeSpan的絕對值。
Hours:傳回用小時計算的TimeSpan值
Milliseconds:傳回用毫秒計算的TimeSpan值。
Minutes:傳回用分鐘計算的TimeSpan值。
Negate:傳回目前執行個體的相反數。
Seconds:傳回用秒計算的TimeSpan值。
Subtract:從中減去另一個TimeSpan值。
Ticks:傳回TimeSpan值的tick數。
TotalDays:傳回TimeSpan值表示的天數。
TotalHours:傳回TimeSpan值表示的小時數。
TotalMilliseconds:傳回TimeSpan值表示的毫秒數。
TotalMinutes:傳回TimeSpan值表示的分鐘數。
TotalSeconds:傳回TimeSpan值表示的秒數。
<col>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<code>TimeSpan ts =</code><code>new</code> <code>TimeSpan(12, 12, 11, 12, 21);</code>
<code>int</code> <code>days =</code><code>new</code> <code>TimeSpan(12, 12, 11, 12, 21).Days;</code>
<code>TimeSpan duration =</code><code>new</code> <code>TimeSpan(-12, 12, 11, 12, 21).Duration();</code><code>//24小時的反值</code>
<code>double</code> <code>totalDays =</code><code>new</code> <code>TimeSpan(12, 12, 11, 12, 21).TotalDays;</code>
<code>double</code> <code>totalHours =</code><code>new</code> <code>TimeSpan(2, 12, 11, 12, 21).TotalHours;</code>
<code>int</code> <code>hours =</code><code>new</code> <code>TimeSpan(12, 12, 11, 12, 21).Hours;</code>
<code>int</code> <code>minutes =</code><code>new</code> <code>TimeSpan(12, 12, 11, 12, 21).Minutes;</code>
<code>TimeSpan ts2 =</code><code>new</code> <code>TimeSpan(1, 3, 01, 12, 21);</code>
<code>// TimeSpan ts2 = new TimeSpan(5, 3, 1, 12, 21);//this is also right</code>
<code>TimeSpan ts3 =</code><code>new</code> <code>TimeSpan(5, 3, 01, 12, 21).Add(ts);</code>
<code>TimeSpan ts4 =</code><code>new</code> <code>TimeSpan(4, 3, 01, 12, 21).Subtract(ts);</code>
<code>TimeSpan ts5 =</code><code>new</code> <code>TimeSpan(4, 3, 01, 12, 21).Subtract(ts).Duration();</code>
<code>TimeSpan Negate =</code><code>new</code> <code>TimeSpan(5, 3, 01, 12, 21).Negate();</code>
<code>DateTime dtnow = DateTime.Now;</code>
<code>Console.WriteLine(ts);</code>
<code>Console.WriteLine(days);</code>
<code>Console.WriteLine(duration);</code>
<code>Console.WriteLine(totalDays);</code>
<code>Console.WriteLine(totalHours);</code>
<code>Console.WriteLine(hours);</code>
<code>Console.WriteLine(minutes);</code>
<code>Console.WriteLine(ts2);</code>
<code>Console.WriteLine(ts+ts2);</code>
<code>Console.WriteLine(ts3);</code>
<code>Console.WriteLine(</code><code>"Subtract:"</code><code>+ts4);</code>
<code>Console.WriteLine(</code><code>"Duration:"</code> <code>+ ts5);</code>
<code>Console.WriteLine(ts - ts2);</code>
<code>Console.WriteLine(Negate);</code>
<code>DateTime span = DateTime.Now.Add(ts2);</code>
<code>TimeSpan spdate = span - DateTime.Now;</code>
<code>long</code> <code>dateTicks = DateTime.Now.Add(ts2).Ticks;</code>
<code>Console.WriteLine(span);</code>
<code>Console.WriteLine(spdate);</code>
<code>Console.WriteLine(dateTicks);</code>
最近有個統計分布的需求,需要按統計本周,上周,本月,上月,本季度,上季度,本年度,上年度等時間統計分布趨勢,是以這裡就涉及到計算周,月,季度,年度等的起止時間了,下面總結一下C#中關于根據目前時間擷取周,月,季度,年度等時間段的起止時間的方法,廢話不多說,直接貼代碼,如果你覺得有用,請多多推薦。
35
36
37
38
39
40
41
42
43
44
45
46
47
<code>DateTime dt = DateTime.Now; </code><code>//目前時間</code>
<code>DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString(</code><code>"d"</code><code>))); </code><code>//本周周一</code>
<code>DateTime endWeek = startWeek.AddDays(6); </code><code>//本周周日</code>
<code>DateTime startMonth = dt.AddDays(1 - dt.Day); </code><code>//本月月初</code>
<code>DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); </code><code>//本月月末//</code>
<code>endMonth = startMonth.AddDays((dt.AddMonths(1) - dt).Days - 1); </code><code>//本月月末</code>
<code>DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); </code><code>//本季度初</code>
<code>DateTime endQuarter = startQuarter.AddMonths(3).AddDays(-1); </code><code>//本季度末</code>
<code>DateTime startYear =</code><code>new</code> <code>DateTime(dt.Year, 1, 1); </code><code>//本年年初</code>
<code>DateTime endYear =</code><code>new</code> <code>DateTime(dt.Year, 12, 31); </code><code>//本年年末至于昨天、明天、上周、上月、上季度、上年度等等,</code>
<code>var</code> <code>上周一 = DateTime.Now.AddDays(Convert.ToInt32(1 - Convert.ToInt32(DateTime.Now.DayOfWeek)) - 7); </code><code>//上周一</code>
<code>var</code> <code>上周末 = DateTime.Now.AddDays(Convert.ToInt32(1 - Convert.ToInt32(DateTime.Now.DayOfWeek)) - 7).AddDays(6); </code><code>//上周末(星期日)//下周</code>
<code>var</code> <code>下周一 = DateTime.Now.AddDays(Convert.ToInt32(1 - Convert.ToInt32(DateTime.Now.DayOfWeek)) + 7); </code><code>//下周一</code>
<code>var</code> <code>下周末 = DateTime.Now.AddDays(Convert.ToInt32(1 - Convert.ToInt32(DateTime.Now.DayOfWeek)) + 7).AddDays(6);</code><code>//下周末</code>
<code>DateTime.Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() +</code><code>"1"</code><code>).AddMonths(1).AddDays(-1).ToShortDateString();</code><code>//最後一天</code>
<code>//巧用C#裡ToString的字元格式化更簡便</code>
<code>DateTime.Now.ToString(</code><code>"yyyy-MM-01"</code><code>);</code><code>//本月初</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-MM-01"</code><code>)).AddMonths(1).AddDays(-1).ToShortDateString();</code><code>//本月最後一天</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-MM-01"</code><code>)).AddMonths(-1).ToShortDateString();</code><code>//上個月1号</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-MM-01"</code><code>)).AddDays(-1).ToShortDateString();</code><code>//上個月最後一天</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-MM-01"</code><code>)).AddMonths(1).ToShortDateString();</code><code>// 下個月1号</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-MM-01"</code><code>)).AddMonths(2).AddDays(-1).ToShortDateString();</code><code>//下下月最後一天</code>
<code>DateTime.Now.AddDays(7).ToShortDateString();</code><code>//7天後</code>
<code>DateTime.Now.AddDays(-7).ToShortDateString();</code><code>//7天前</code>
<code>DateTime.Now.Date.ToShortDateString();</code><code>//本年度,用ToString的字元格式化我們也很容易地算出本年度的第一天和最後一天</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-01-01"</code><code>)).ToShortDateString();</code><code>//本年度第一天</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-01-01"</code><code>)).AddYears(1).AddDays(-1).ToShortDateString();</code><code>//本年度最後一天</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-01-01"</code><code>)).AddYears(-1).ToShortDateString();</code><code>//上年度第一天,</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-01-01"</code><code>)).AddDays(-1).ToShortDateString();</code><code>//上年度第最後一天,</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-01-01"</code><code>)).AddYears(1).ToShortDateString(); </code><code>//下年度第一天</code>
<code>DateTime.Parse(DateTime.Now.ToString(</code><code>"yyyy-01-01"</code><code>)).AddYears(2).AddDays(-1).ToShortDateString();</code><code>//下年度最後一天</code>
<code>//本季度,</code>
<code>DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).AddDays(1 - DateTime.Now.Day);</code><code>//本季度第一天;</code>
<code>DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString(</code><code>"yyyy-MM-01"</code><code>)).AddDays(-1).ToShortDateString();</code><code>//本季度的最後一天</code>
<code>DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString(</code><code>"yyyy-MM-01"</code><code>);</code><code>//下季度的第一天</code>
<code>DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString(</code><code>"yyyy-MM-01"</code><code>)).AddDays(-1).ToShortDateString();</code><code>// 下季度最後一天</code>
<code>DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).AddDays(1 - DateTime.Now.Day);</code><code>// 上季度第一天</code>
<code>DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).AddDays(1 - DateTime.Now.Day).AddDays(-1).ToShortDateString();</code><code>// 上季度最後一天</code>
DateTime dt = DateTime.Now; //目前時間DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); //本周周一DateTime endWeek = startWeek.AddDays(6); //本周周日
DateTime startMonth = dt.AddDays(1 - dt.Day); //本月月初DateTime endMonth = startMonth.AddMonths(1).AddDays(-1); //本月月末//
endMonth = startMonth.AddDays((dt.AddMonths(1) - dt).Days - 1); //本月月末DateTime startQuarter = dt.AddMonths(0 - (dt.Month - 1) % 3).AddDays(1 - dt.Day); //本季度初DateTime endQuarter = startQuarter.AddMonths(3).AddDays(-1); //本季度末
DateTime startYear = new DateTime(dt.Year, 1, 1); //本年年初DateTime endYear = new DateTime(dt.Year, 12, 31); //本年年末至于昨天、明天、上周、上月、上季度、上年度等等,
var 上周一 = DateTime.Now.AddDays(Convert.ToInt32(1 - Convert.ToInt32(DateTime.Now.DayOfWeek)) - 7); //上周一var 上周末 = DateTime.Now.AddDays(Convert.ToInt32(1 - Convert.ToInt32(DateTime.Now.DayOfWeek)) - 7).AddDays(6); //上周末(星期日)//下周var 下周一 = DateTime.Now.AddDays(Convert.ToInt32(1 - Convert.ToInt32(DateTime.Now.DayOfWeek)) + 7); //下周一var 下周末 = DateTime.Now.AddDays(Convert.ToInt32(1 - Convert.ToInt32(DateTime.Now.DayOfWeek)) + 7).AddDays(6); //下周末
DateTime.Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1").AddMonths(1).AddDays(-1).ToShortDateString();//最後一天//巧用C#裡ToString的字元格式化更簡便DateTime.Now.ToString("yyyy-MM-01");//本月初DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString();//本月最後一天DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString();//上個月1号DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();//上個月最後一天DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString();// 下個月1号DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();//下下月最後一天DateTime.Now.AddDays(7).ToShortDateString();//7天後DateTime.Now.AddDays(-7).ToShortDateString();//7天前DateTime.Now.Date.ToShortDateString();//本年度,用ToString的字元格式化我們也很容易地算出本年度的第一天和最後一天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString();//本年度第一天DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();//本年度最後一天
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString(); //上年度第一天, DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddDays(-1).ToShortDateString();//上年度第最後一天,
DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString(); //下年度第一天DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();//下年度最後一天//本季度,DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).AddDays(1 - DateTime.Now.Day);//本季度第一天; DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();//本季度的最後一天DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01");//下季度的第一天DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();// 下季度最後一天
DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).AddDays(1 - DateTime.Now.Day);// 上季度第一天DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).AddDays(1 - DateTime.Now.Day).AddDays(-1).ToShortDateString();// 上季度最後一天