tool.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package tool
  2. import (
  3. "crypto/md5"
  4. "encoding/hex"
  5. "fmt"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. const (
  11. Layout = "2006-01-02 15:04:05"
  12. DateTime = "2006-01-02"
  13. DefaultExecTime = "0_0_0"
  14. )
  15. // StringToTimeUnix 时间字符串转换成时间戳
  16. // a.g 6_2_3 ===> 转换成 6天2小时3分钟后的时间戳
  17. // TODO 需要优化代码写得太死,需要优化后兼容秒的场景
  18. func StringToTimeUnix(execTimeStr string) int64 {
  19. var processAt = time.Now().Unix()
  20. if execTimeStr == DefaultExecTime {
  21. return processAt
  22. }
  23. execTime := strings.Split(execTimeStr, "_")
  24. if len(execTime) < 3 {
  25. return processAt
  26. }
  27. // 天数
  28. days, _ := strconv.Atoi(execTime[0])
  29. processAt += int64(days) * 24 * 60 * 60
  30. // 小时
  31. hours, _ := strconv.Atoi(execTime[1])
  32. processAt += int64(hours) * 60 * 60
  33. // 分钟
  34. minutes, _ := strconv.Atoi(execTime[2])
  35. processAt += int64(minutes) * 60
  36. return processAt
  37. }
  38. func GetLocalTime(timeStr string) time.Time {
  39. execTime, _ := time.ParseInLocation(Layout, timeStr, time.Local)
  40. return execTime
  41. }
  42. // TimeParseLocalUnix 获取当天零点的时间戳
  43. // eg 2023-02-22 => 1676995200
  44. func TimeParseLocalUnix(DayTime string) int64 {
  45. value := DayTime
  46. if len(DayTime) <= 11 {
  47. value = fmt.Sprintf("%s 00:00:00", DayTime)
  48. }
  49. loc, _ := time.LoadLocation("Local")
  50. theTime, _ := time.ParseInLocation(Layout, value, loc)
  51. return theTime.Unix()
  52. }
  53. func Md5String(input string) string {
  54. s := md5.New()
  55. digest := strings.ReplaceAll(input, "\n", "")
  56. s.Write([]byte(digest))
  57. return hex.EncodeToString(s.Sum(nil))
  58. }
  59. // TimeBetween 获取指定时间范围内天数
  60. // eg startTime => "2023-06-01" endTime => "2023-06-03"
  61. // return ["2023-06-01","2023-06-02","2023-06-03"]
  62. func TimeBetween(startTime, endTime string) []string {
  63. startDate, _ := time.ParseInLocation("2006-01-02", startTime, time.Local)
  64. endDate, _ := time.ParseInLocation("2006-01-02", endTime, time.Local)
  65. timeList := make([]string, 0)
  66. for endDate.After(startDate) {
  67. timeList = append(timeList, startDate.Format("2006-01-02"))
  68. startDate = startDate.AddDate(0, 0, 1)
  69. }
  70. timeList = append(timeList, endTime)
  71. return timeList
  72. }
  73. // Median 获取切片的中位值
  74. func Median(nums []float64) float64 {
  75. n := len(nums)
  76. if n%2 == 0 {
  77. return (nums[n/2-1] + nums[n/2]) / float64(2)
  78. } else {
  79. return nums[n/2]
  80. }
  81. }