天天看點

C# TimeSpan 計算時間差(時間間隔)(轉)

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();// 上季度最後一天