項目gitHub地址 點我跳轉 今天給大家帶來一個C#裡面的時間工具類,具體的直接看下麵代碼 1 using System; 2 3 namespace ToolBox.DateTimeTool 4 { 5 public static class DateTimeExtend 6 { 7 /// < ...
項目gitHub地址 點我跳轉
今天給大家帶來一個C#裡面的時間工具類,具體的直接看下麵代碼
1 using System; 2 3 namespace ToolBox.DateTimeTool 4 { 5 public static class DateTimeExtend 6 { 7 /// <summary> 8 /// 獲取本日開始時間(0點0分0秒) 9 /// </summary> 10 /// <param name="dateTime"></param> 11 /// <returns></returns> 12 public static DateTime GetDayStart(this DateTime dateTime) 13 { 14 return dateTime.Date; 15 } 16 17 /// <summary> 18 /// 獲取本日結束時間(23點59分59秒) 19 /// </summary> 20 /// <param name="dateTime"></param> 21 /// <returns></returns> 22 public static DateTime GetDayEnd(this DateTime dateTime) 23 { 24 return dateTime.Date.AddDays(1).AddMilliseconds(-1); 25 } 26 27 /// <summary> 28 /// 獲取本周開始時間 29 /// </summary> 30 /// <param name="dateTime"></param> 31 /// <returns></returns> 32 public static DateTime GetWeekStart(this DateTime dateTime) 33 { 34 return dateTime.AddDays(-(int)dateTime.DayOfWeek + 1).GetDayStart(); 35 } 36 37 /// <summary> 38 /// 獲取本周結束時間 39 /// </summary> 40 /// <param name="dateTime"></param> 41 /// <returns></returns> 42 public static DateTime GetWeekEnd(this DateTime dateTime) 43 { 44 return dateTime.AddDays(7 - (int)dateTime.DayOfWeek).GetDayEnd(); 45 } 46 47 /// <summary> 48 /// 獲取本月開始時間 49 /// </summary> 50 /// <param name="dateTime"></param> 51 /// <returns></returns> 52 public static DateTime GetMonthStart(this DateTime dateTime) 53 { 54 return new DateTime(dateTime.Year, dateTime.Month, 1, 0, 0, 0, 0); 55 } 56 57 /// <summary> 58 /// 獲取本月結束時間 59 /// </summary> 60 /// <param name="dateTime"></param> 61 /// <returns></returns> 62 public static DateTime GetMonthEnd(this DateTime dateTime) 63 { 64 return GetMonthStart(dateTime).AddMonths(1).AddMilliseconds(-1); 65 } 66 67 /// <summary> 68 /// 獲取本季度開始時間 69 /// </summary> 70 /// <param name="dateTime"></param> 71 /// <returns></returns> 72 public static DateTime GetSeasonStart(this DateTime dateTime) 73 { 74 var time = dateTime.AddMonths(0 - ((dateTime.Month - 1) % 3)); 75 return DateTime.Parse(time.AddDays(-time.Day + 1).ToString("yyyy/MM/dd 00:00:00")); 76 } 77 78 /// <summary> 79 /// 獲取本季度結束時間 80 /// </summary> 81 /// <param name="dateTime"></param> 82 /// <returns></returns> 83 public static DateTime GetSeasonEnd(this DateTime dateTime) 84 { 85 var time = dateTime.AddMonths((3 - ((dateTime.Month - 1) % 3) - 1)); 86 return DateTime.Parse(time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1).ToString("yyyy/MM/dd 23:59:59")); 87 } 88 89 /// <summary> 90 /// 獲取本年開始時間 91 /// </summary> 92 /// <param name="dateTime"></param> 93 /// <returns></returns> 94 public static DateTime GetYearStart(this DateTime dateTime) 95 { 96 return DateTime.Parse(dateTime.AddDays(-dateTime.DayOfYear + 1).ToString("yyyy/MM/dd 00:00:00")); 97 } 98 99 /// <summary> 100 /// 獲取本年結束時間 101 /// </summary> 102 /// <param name="dateTime"></param> 103 /// <returns></returns> 104 public static DateTime GetYearEnd(this DateTime dateTime) 105 { 106 var time2 = dateTime.AddYears(1); 107 return DateTime.Parse(time2.AddDays(-time2.DayOfYear).ToString("yyyy/MM/dd 23:59:59")); 108 } 109 110 /// <summary> 111 /// 北京時間轉換成unix時間戳(10位/秒) 112 /// </summary> 113 /// <param name="dateTime"></param> 114 /// <returns></returns> 115 public static long BeijingTimeToUnixTimeStamp10(this DateTime dateTime) 116 { 117 return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds; 118 } 119 120 /// <summary> 121 /// 格林威治時間轉換成unix時間戳(10位/秒) 122 /// </summary> 123 /// <param name="dateTime"></param> 124 /// <returns></returns> 125 public static long UtcTimeToUnixTimeStamp10(this DateTime dateTime) 126 { 127 return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds; 128 } 129 130 /// <summary> 131 /// 北京時間轉換成unix時間戳(13位/毫秒) 132 /// </summary> 133 /// <param name="dateTime"></param> 134 /// <returns></returns> 135 public static long BeijingTimeToUnixTimeStamp13(this DateTime dateTime) 136 { 137 return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalMilliseconds; 138 } 139 140 /// <summary> 141 /// 格林威治時間轉換成unix時間戳(13位/毫秒) 142 /// </summary> 143 /// <param name="dateTime"></param> 144 /// <returns></returns> 145 public static long UtcTimeToUnixTimeStamp13(this DateTime dateTime) 146 { 147 return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds; 148 } 149 150 /// <summary> 151 /// 10位unix時間戳轉換成北京時間 152 /// </summary> 153 /// <param name="dateTime"></param> 154 /// <returns></returns> 155 public static DateTime UnixTimeStamp10ToBeijingTime(this long unixTimeStamp) 156 { 157 return new DateTime(1970, 1, 1, 8, 0, 0).AddSeconds(unixTimeStamp); 158 } 159 160 /// <summary> 161 /// 10位unix時間戳轉換成格林威治 162 /// </summary> 163 /// <param name="dateTime"></param> 164 /// <returns></returns> 165 public static DateTime UnixTimeStamp10ToUtcTime(this long unixTimeStamp) 166 { 167 return new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(unixTimeStamp); 168 } 169 170 /// <summary> 171 /// 13位unix時間戳轉換成北京時間 172 /// </summary> 173 /// <param name="dateTime"></param> 174 /// <returns></returns> 175 public static DateTime UnixTimeStamp13ToBeijingTime(this long unixTimeStamp) 176 { 177 return new DateTime(1970, 1, 1, 8, 0, 0).AddMilliseconds(unixTimeStamp); 178 } 179 180 /// <summary> 181 /// 13位unix時間戳轉換成格林威治 182 /// </summary> 183 /// <param name="dateTime"></param> 184 /// <returns></returns> 185 public static DateTime UnixTimeStamp13ToUtcTime(this long unixTimeStamp) 186 { 187 return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(unixTimeStamp); 188 } 189 190 /// <summary> 191 /// 當前日期所在月份第一個指定星期幾的日期 192 /// </summary> 193 /// <param name="date">給定日期</param> 194 /// <param name="dayOfWeek">星期幾</param> 195 /// <returns>所對應的日期</returns> 196 public static DateTime GetFirstWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek) 197 { 198 var dt = date.GetMonthStart(); 199 while (dt.DayOfWeek != dayOfWeek) 200 dt = dt.AddDays(1); 201 202 return dt; 203 } 204 205 /// <summary> 206 /// 當前日期所在月份最後1個指定星期幾的日期 207 /// </summary> 208 /// <param name="date">給定日期</param> 209 /// <param name="dayOfWeek">星期幾</param> 210 /// <returns>所對應的日期</returns> 211 public static DateTime GetLastWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek) 212 { 213 var dt = date.GetMonthEnd(); 214 while (dt.DayOfWeek != dayOfWeek) 215 dt = dt.AddDays(-1); 216 217 return dt; 218 } 219 220 /// <summary> 221 /// 判斷是否比指定之間早 222 /// </summary> 223 /// <param name="date"></param> 224 /// <param name="other"></param> 225 /// <returns></returns> 226 public static bool IsBefore(this DateTime date, DateTime other) 227 { 228 return date < other; 229 } 230 231 /// <summary> 232 /// 判斷是否比指定時間晚 233 /// </summary> 234 /// <param name="date"></param> 235 /// <param name="other"></param> 236 /// <returns></returns> 237 public static bool IsAfter(this DateTime date, DateTime other) 238 { 239 return date > other; 240 } 241 242 /// <summary> 243 /// 給定日期所在月份共有多少天 244 /// </summary> 245 /// <param name="date"></param> 246 /// <returns></returns> 247 public static int GetCountDaysOfMonth(this DateTime date) 248 { 249 return date.GetMonthEnd().Day; 250 } 251 252 /// <summary> 253 /// 當前日期與給定日期是否是同一天 254 /// </summary> 255 /// <param name="date">當前日期</param> 256 /// <param name="dateToCompare">給定日期</param> 257 /// <returns></returns> 258 public static bool IsDateEqual(this DateTime date, DateTime dateToCompare) 259 { 260 return date.Date == dateToCompare.Date; 261 } 262 263 /// <summary> 264 /// 是否是周未 265 /// </summary> 266 /// <param name="date"></param> 267 /// <returns></returns> 268 public static bool IsWeekend(this DateTime date) 269 { 270 return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday; 271 } 272 273 /// <summary> 274 /// 是否是工作日 275 /// </summary> 276 /// <param name="date"></param> 277 /// <returns></returns> 278 public static bool IsWeekDay(this DateTime date) 279 { 280 return !date.IsWeekend(); 281 } 282 283 /// <summary> 284 /// 判斷是否為今天 285 /// </summary> 286 /// <param name="date"></param> 287 /// <returns></returns> 288 public static bool IsToday(this DateTime date) 289 { 290 return date.Date == DateTime.Now.Date; 291 } 292 293 /// <summary> 294 /// 判定西曆閏年遵循的一般規律為:四年一閏,百年不閏,四百年再閏。 295 /// 西曆閏年的精確計算方法:(按一回歸年365天5小時48分45.5秒) 296 /// 普通年能被4整除而不能被100整除的為閏年。 (如2004年就是閏年,1900年不是閏年) 297 /// 世紀年能被400整除而不能被3200整除的為閏年。 (如2000年是閏年,3200年不是閏年) 298 /// 對於數值很大的年份能整除3200,但同時又能整除172800則又是閏年。(如172800年是閏年,86400年不是閏年) 299 /// 公元前閏年規則如下: 300 /// 非整百年:年數除4餘數為1是閏年,即公元前1、5、9……年; 301 /// 整百年:年數除400餘數為1是閏年,年數除3200餘數為1,不是閏年,年數除172800餘1又為閏年,即公元前401、801……年。 302 /// </summary> 303 /// <param name="dateTime"></param> 304 /// <returns></returns> 305 public static bool IsLeap(this DateTime dateTime) 306 { 307 var year = dateTime.Year; 308 if ((year % 400 == 0 && year % 3200 != 0) 309 || (year % 4 == 0 && year % 100 != 0) 310 || (year % 3200 == 0 && year % 172800 == 0)) 311 return true; 312 else 313 return false; 314 } 315 316 /// <summary> 317 /// 獲取當前年天數 318 /// </summary> 319 /// <param name="dateTime"></param> 320 /// <returns></returns> 321 public static int GetDaysByYear(this DateTime dateTime) 322 { 323 return (new DateTime(dateTime.Year + 1, 1, 1) - new DateTime(dateTime.Year, 1, 1)).Days; 324 } 325 326 /// <summary> 327 /// 獲取當前年天數 328 /// </summary> 329 /// <param name="dateTime"></param> 330 /// <returns></returns> 331 public static int GetWeekCountByYear(this DateTime dateTime) 332 { 333 //找到今年的第一天是周幾 334 int firstWeekend = Convert.ToInt32(DateTime.Parse(dateTime.Year + "-1-1").DayOfWeek); 335 336 //獲取第一周的差額,如果是周日,則firstWeekend為0,第一周也就是從周天開始的。 337 int weekDay = firstWeekend == 0 ? 1 : (7 - firstWeekend + 1); 338 339 //獲取今天是一年當中的第幾天 340 int currentDay = dateTime.DayOfYear; 341 342 //(今天 減去 第一周周末)/7 等於 距第一周有多少周 再加上第一周的1 就是今天是今年的第幾周了 343 // 剛好考慮了惟一的特殊情況就是,今天剛好在第一周內,那麼距第一周就是0 再加上第一周的1 最後還是1 344 int current_week = Convert.ToInt32(Math.Ceiling((currentDay - weekDay) / 7.0)) + 1; 345 return current_week; 346 } 347 348 } 349 }
這個時間工具類是自己通過各種途徑彙總的常用方法,需要的朋友可以自行拿走,有其他新的需求可以在評論下麵告訴我,一起完善,謝謝
另外需要使用的朋友可以直接在Nuget 搜索 ToolBox.DateTimeTool 安裝使用即可 支持NET Framework 以及Net core