DateTimeUtil.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. using System;
  2. namespace ET
  3. {
  4. /// <summary>
  5. /// 时间工具类
  6. /// </summary>
  7. public static class DateTimeUtil
  8. {
  9. /// <summary>
  10. /// 时间戳计时开始时间
  11. /// </summary>
  12. private static DateTime timeStampStartTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
  13. /// <summary>
  14. /// DateTime转换为10位时间戳(单位:秒)
  15. /// </summary>
  16. /// <param name="dateTime"> DateTime</param>
  17. /// <returns>10位时间戳(单位:秒)</returns>
  18. public static long DateTimeToTimeStamp(DateTime dateTime)
  19. {
  20. return (long)(dateTime.ToUniversalTime() - timeStampStartTime).TotalSeconds;
  21. }
  22. /// <summary>
  23. /// DateTime转换为13位时间戳(单位:毫秒)
  24. /// </summary>
  25. /// <param name="dateTime"> DateTime</param>
  26. /// <returns>13位时间戳(单位:毫秒)</returns>
  27. public static long DateTimeToLongTimeStamp(DateTime dateTime)
  28. {
  29. return (long)(dateTime.ToUniversalTime() - timeStampStartTime).TotalMilliseconds;
  30. }
  31. /// <summary>
  32. /// 10位时间戳(单位:秒)转换为DateTime
  33. /// </summary>
  34. /// <param name="timeStamp">10位时间戳(单位:秒)</param>
  35. /// <returns>DateTime</returns>
  36. public static DateTime TimeStampToDateTime(long timeStamp)
  37. {
  38. return timeStampStartTime.AddSeconds(timeStamp).ToLocalTime();
  39. }
  40. /// <summary>
  41. /// 13位时间戳(单位:毫秒)转换为DateTime
  42. /// </summary>
  43. /// <param name="longTimeStamp">13位时间戳(单位:毫秒)</param>
  44. /// <returns>DateTime</returns>
  45. public static DateTime LongTimeStampToDateTime(long longTimeStamp)
  46. {
  47. return timeStampStartTime.AddMilliseconds(longTimeStamp).ToLocalTime();
  48. }
  49. public const string FormatA = "yyyyMMdd";
  50. public const string FormatB = "yyyyMMddHH";
  51. public const string FormatC = "yyyyMMddHHmm";
  52. public const string FormatD = "yyyyMMddHHmmss";
  53. public const string FormatE = "yyyyMMddHHmmssFFF";
  54. public const string FormatF = "HHmmss";
  55. /// <summary>
  56. /// 当前时间 yyyyMMddHHmmssFFF
  57. /// </summary>
  58. /// <returns></returns>
  59. public static long GetNowTime(string format)
  60. {
  61. if (format == FormatE)
  62. {
  63. return UpTimeStamp(long.Parse(TimeHelper.DateTimeNow().ToString(format)));
  64. }
  65. else
  66. {
  67. return long.Parse(TimeHelper.DateTimeNow().ToString(format));
  68. }
  69. }
  70. public static long UpTimeStamp(long lg)
  71. {
  72. if (lg == 0) return lg;
  73. string logStr = lg.ToString();
  74. if (logStr.Length < 17)
  75. {
  76. return UpTimeStamp(lg * 10);
  77. }
  78. else
  79. {
  80. return lg;
  81. }
  82. }
  83. /// <summary>
  84. /// 当前时间 yyyyMMddHHmmssFFF
  85. /// </summary>
  86. /// <returns></returns>
  87. public static long GetTime(DateTime dt, string format)
  88. {
  89. if (format == FormatE)
  90. {
  91. long lgTime = UpTimeStamp(long.Parse(dt.ToString(format)));
  92. return lgTime;
  93. }
  94. else
  95. {
  96. return long.Parse(dt.ToString(format));
  97. }
  98. }
  99. /// <summary>
  100. /// 获取指定中国毫秒级时间戳所在日期的凌晨5点的时间戳
  101. /// </summary>
  102. /// <param name="timestamp">13位时间戳</param>
  103. /// <returns></returns>
  104. public static long GetChinaToday5AMTimestamp(long timestamp)
  105. {
  106. DateTime dateTime = DateTimeUtil.LongTimeStampToDateTime(timestamp);
  107. // 转换为 DateTimeOffset
  108. DateTimeOffset dateTimeOffset = new DateTimeOffset(dateTime);
  109. // 获取当天日期的凌晨00点
  110. DateTimeOffset today = new DateTimeOffset(dateTimeOffset.Year, dateTimeOffset.Month, dateTimeOffset.Day, 0,
  111. 0, 0, TimeSpan.FromHours(8));
  112. // 设置凌晨5点的时间
  113. DateTimeOffset today5AM = today.AddHours(5);
  114. // 返回凌晨5点的时间戳(毫秒级)
  115. return today5AM.ToUnixTimeMilliseconds();
  116. }
  117. }
  118. }