DateTimeHelper.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace TEAMModelOS.SDK
  5. {
  6. public static class DateTimeHelper
  7. {
  8. public static DateTime FromUnixTimestamp(this long unixtime)
  9. {
  10. DateTime sTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1), TimeZoneInfo.Utc, TimeZoneInfo.Local);
  11. return sTime.AddMilliseconds(unixtime);
  12. }
  13. public static long ToUnixTimestamp(this DateTime datetime)
  14. {
  15. //DateTime sTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
  16. DateTime sTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1), TimeZoneInfo.Utc, TimeZoneInfo.Local);
  17. return (long)(datetime - sTime).TotalMilliseconds;
  18. }
  19. /// <summary>
  20. /// 获得 GMT+8 时间
  21. /// </summary>
  22. /// <returns></returns>
  23. public static DateTime GetGMTTime(this DateTime dateTime, int GMT = 8)
  24. {
  25. //SystemTimeZoneById : https://learn.microsoft.com/zh-cn/previous-versions/windows/embedded/ms912391(v=winembedded.11)
  26. //TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("China Standard Time");//设置时区
  27. //DateTime easternTime = TimeZoneInfo.ConvertTimeFromUtc(dateTime, easternZone);
  28. //return easternTime;
  29. //处理UTC时差
  30. TimeZoneInfo localTimezone = TimeZoneInfo.Local;
  31. var Hours = localTimezone.BaseUtcOffset.Hours;
  32. dateTime = dateTime.AddHours(GMT-Hours);
  33. return dateTime;
  34. }
  35. /// <summary>
  36. /// 默认东八区+8
  37. /// </summary>
  38. /// <param name="dateTime"></param>
  39. /// <param name="GMT"></param>
  40. /// <returns></returns>
  41. public static DateTimeOffset GetGMTTime(this DateTimeOffset dateTime,int GMT=+8)
  42. {
  43. //处理UTC时差
  44. TimeZoneInfo localTimezone = TimeZoneInfo.Local;
  45. var Hours = localTimezone.BaseUtcOffset.Hours;
  46. dateTime = dateTime.AddHours(GMT-Hours);
  47. return dateTime;
  48. }
  49. public static int getDays(int year) {
  50. int day = 0;
  51. for (int i = 0;i<=12;i++) {
  52. int days = 0;
  53. if (i != 2)
  54. {
  55. switch (i)
  56. {
  57. case 1:
  58. case 3:
  59. case 5:
  60. case 7:
  61. case 8:
  62. case 10:
  63. case 12:
  64. days = 31;
  65. break;
  66. case 4:
  67. case 6:
  68. case 9:
  69. case 11:
  70. days = 30;
  71. break;
  72. }
  73. }
  74. else {
  75. if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
  76. {
  77. days = 29;
  78. }
  79. else {
  80. days = 28;
  81. }
  82. }
  83. day += days;
  84. }
  85. return day;
  86. }
  87. #region 获取 本周、本月、本季度、本年 的开始时间或结束时间
  88. /// <summary>
  89. /// 获取开始时间
  90. /// </summary>
  91. /// <param name="TimeType">Week、Month、Season、Year</param>
  92. /// <param name="now"></param>
  93. /// <returns></returns>
  94. public static DateTime? GetTimeStartByType(string TimeType, DateTime now)
  95. {
  96. switch (TimeType)
  97. {
  98. case "Week":
  99. return now.AddDays(-(int)now.DayOfWeek + 1);
  100. case "Month":
  101. return now.AddDays(-now.Day + 1);
  102. case "Season":
  103. var time = now.AddMonths(0 - ((now.Month - 1) % 3));
  104. return time.AddDays(-time.Day + 1);
  105. case "Year":
  106. return now.AddDays(-now.DayOfYear + 1);
  107. default:
  108. return null;
  109. }
  110. }
  111. /// <summary>
  112. /// 获取结束时间
  113. /// </summary>
  114. /// <param name="TimeType">Week、Month、Season、Year</param>
  115. /// <param name="now"></param>
  116. /// <returns></returns>
  117. public static DateTime? GetTimeEndByType(string TimeType, DateTime now)
  118. {
  119. switch (TimeType)
  120. {
  121. case "Week":
  122. return now.AddDays(7 - (int)now.DayOfWeek);
  123. case "Month":
  124. return now.AddMonths(1).AddDays(-now.AddMonths(1).Day + 1).AddDays(-1);
  125. case "Season":
  126. var time = now.AddMonths((3 - ((now.Month - 1) % 3) - 1));
  127. return time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1);
  128. case "Year":
  129. var time2 = now.AddYears(1);
  130. return time2.AddDays(-time2.DayOfYear);
  131. default:
  132. return null;
  133. }
  134. }
  135. #endregion
  136. }
  137. }