DateTimeHelper.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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.Local, 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 DateTimeOffset GetUTCTime(this DateTimeOffset dateTime, int GMT)
  50. {
  51. //处理UTC时差
  52. TimeZoneInfo localTimezone = TimeZoneInfo.Local;
  53. var Hours = localTimezone.BaseUtcOffset.Hours;
  54. dateTime = dateTime.AddHours(Hours - GMT);
  55. return dateTime;
  56. }
  57. public static int getDays(int year) {
  58. int day = 0;
  59. for (int i = 0;i<=12;i++) {
  60. int days = 0;
  61. if (i != 2)
  62. {
  63. switch (i)
  64. {
  65. case 1:
  66. case 3:
  67. case 5:
  68. case 7:
  69. case 8:
  70. case 10:
  71. case 12:
  72. days = 31;
  73. break;
  74. case 4:
  75. case 6:
  76. case 9:
  77. case 11:
  78. days = 30;
  79. break;
  80. }
  81. }
  82. else {
  83. if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
  84. {
  85. days = 29;
  86. }
  87. else {
  88. days = 28;
  89. }
  90. }
  91. day += days;
  92. }
  93. return day;
  94. }
  95. #region 获取 本周、本月、本季度、本年 的开始时间或结束时间
  96. /// <summary>
  97. /// 获取开始时间
  98. /// </summary>
  99. /// <param name="TimeType">Week、Month、Season、Year</param>
  100. /// <param name="now"></param>
  101. /// <returns></returns>
  102. public static DateTime? GetTimeStartByType(string TimeType, DateTime now)
  103. {
  104. switch (TimeType)
  105. {
  106. case "Week":
  107. return now.AddDays(-(int)now.DayOfWeek + 1);
  108. case "Month":
  109. return now.AddDays(-now.Day + 1);
  110. case "Season":
  111. var time = now.AddMonths(0 - ((now.Month - 1) % 3));
  112. return time.AddDays(-time.Day + 1);
  113. case "Year":
  114. return now.AddDays(-now.DayOfYear + 1);
  115. default:
  116. return null;
  117. }
  118. }
  119. /// <summary>
  120. /// 获取结束时间
  121. /// </summary>
  122. /// <param name="TimeType">Week、Month、Season、Year</param>
  123. /// <param name="now"></param>
  124. /// <returns></returns>
  125. public static DateTime? GetTimeEndByType(string TimeType, DateTime now)
  126. {
  127. switch (TimeType)
  128. {
  129. case "Week":
  130. return now.AddDays(7 - (int)now.DayOfWeek);
  131. case "Month":
  132. return now.AddMonths(1).AddDays(-now.AddMonths(1).Day + 1).AddDays(-1);
  133. case "Season":
  134. var time = now.AddMonths((3 - ((now.Month - 1) % 3) - 1));
  135. return time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1);
  136. case "Year":
  137. var time2 = now.AddYears(1);
  138. return time2.AddDays(-time2.DayOfYear);
  139. default:
  140. return null;
  141. }
  142. }
  143. #endregion
  144. }
  145. }