DateTimeUtils.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System.Globalization;
  2. using System;
  3. namespace JiaZhiQuan.Common.Utils
  4. {
  5. public static class DateTimeUtils
  6. {
  7. /// <summary>
  8. /// 获取当前日期是第几周,周的起始日期和结束日期
  9. /// </summary>
  10. /// <param name="tmpDate"></param>
  11. /// <returns>(当前周是今年的第几周,周的开始日期,周的结束日期)</returns>
  12. public static (int, DateTime, DateTime) GetDateWeekRange(DateTime tmpDate)
  13. {
  14. var startDateStr = tmpDate.Date.AddDays(-(int)tmpDate.DayOfWeek);//当前周的开始日期
  15. var endDateStr = tmpDate.Date.AddDays(6 - (int)tmpDate.DayOfWeek);//当前周的结束日期
  16. GregorianCalendar gc = new GregorianCalendar();
  17. // 完整周计算,周的开始是周日
  18. int weekOfYear = gc.GetWeekOfYear(tmpDate, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);
  19. return (weekOfYear, startDateStr, endDateStr);
  20. }
  21. /// <summary>
  22. /// 根据小时开始,返回小时范围
  23. /// case:2020/01/01 23:00~2020/01/07 00:00
  24. /// </summary>
  25. /// <param name="startWeekDate"></param>
  26. /// <returns></returns>
  27. public static string GetHourRangeStr(DateTime start, string dateFormat)
  28. {
  29. return $"{start.ToString(dateFormat)}~{start.AddHours(1).ToString(dateFormat)}";
  30. }
  31. /// <summary>
  32. /// 根据周开始天,返回周范围
  33. /// case:2020/01/01~2020/01/07
  34. /// </summary>
  35. /// <param name="startWeekDate"></param>
  36. /// <returns></returns>
  37. public static string GetWeekRangeStr(string startWeekDate, string dateFormat)
  38. {
  39. return $"{startWeekDate}~{DateTime.Parse(startWeekDate).AddDays(6).ToString(dateFormat)}";
  40. }
  41. /// <summary>
  42. /// 根据月开始天,返回月范围
  43. /// case:2020/01~2020/02
  44. /// </summary>
  45. /// <param name="startWeekDate"></param>
  46. /// <returns></returns>
  47. public static string GetMonthRangeStr(string startMonthDate)
  48. {
  49. var start = DateTime.Parse(startMonthDate);
  50. return $"{start.ToString("yyyy/MM")}~{start.AddMonths(1).ToString("yyyy/MM")}";
  51. }
  52. /// <summary>
  53. /// 计算两个时间相差几周
  54. /// </summary>
  55. /// <param name="startWeekDate"></param>
  56. /// <returns></returns>
  57. public static int TwoDateDiffWeeks(DateTime time1, DateTime time2)
  58. {
  59. var week1 = GetDateWeekRange(time1).Item2;
  60. var week2 = GetDateWeekRange(time2).Item2;
  61. return (int)Math.Floor((week2 - week1).TotalDays / 7.0);
  62. }
  63. /// <summary>
  64. /// 计算两个时间相差几月
  65. /// </summary>
  66. /// <param name="startWeekDate"></param>
  67. /// <returns></returns>
  68. public static int TwoDateDiffMonths(string time1, string time2)
  69. {
  70. var date1 = DateTime.Parse(time1);
  71. var date2 = DateTime.Parse(time2);
  72. return (date2.Year - date1.Year) * 12 + (date2.Month - date1.Month);
  73. }
  74. /// <summary>
  75. /// 获取今天是这周的第几天
  76. /// </summary>
  77. /// <returns></returns>
  78. public static int GetDayOfWeek()
  79. {
  80. DateTime today = DateTime.Now;
  81. // 根据国际周的计算方式调整
  82. int dayOfWeek = ((int)today.DayOfWeek + 6) % 7 + 1;
  83. return dayOfWeek;
  84. }
  85. }
  86. }