util_more.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package util
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "math"
  7. "mime/multipart"
  8. "os"
  9. "strconv"
  10. "strings"
  11. "time"
  12. )
  13. func CurrentMaxFrameId() int32 {
  14. currentHour := time.Now().Hour()
  15. return int32(math.Floor(float64(currentHour/2))) * 10
  16. }
  17. func ArrayInt32ToStrings(cowIds []int32, cutset string) string {
  18. var cows bytes.Buffer
  19. if len(cowIds) <= 0 {
  20. return cows.String()
  21. }
  22. for i, v := range cowIds {
  23. if i > 0 {
  24. cows.WriteString(cutset)
  25. }
  26. cows.WriteString(strconv.Itoa(int(v))) // 将整数转换为字符串
  27. }
  28. return cows.String()
  29. }
  30. // ConvertCowIdsToInt64Slice 将逗号拼接的字符串转换为 int64 切片
  31. func ConvertCowIdsToInt64Slice(input string) ([]int64, error) {
  32. // 如果输入为空,直接返回空切片
  33. if input == "" {
  34. return []int64{}, nil
  35. }
  36. // 按逗号分割字符串
  37. parts := strings.Split(input, ",")
  38. // 初始化结果切片
  39. result := make([]int64, 0, len(parts))
  40. // 遍历每个部分,转换为 int64
  41. for _, part := range parts {
  42. // 去除空格
  43. part = strings.TrimSpace(part)
  44. if part == "" {
  45. continue // 忽略空字符串
  46. }
  47. // 转换为 int64
  48. num, err := strconv.ParseInt(part, 10, 64)
  49. if err != nil {
  50. return nil, fmt.Errorf("invalid number: %s", part)
  51. }
  52. // 添加到结果切片
  53. result = append(result, num)
  54. }
  55. return result, nil
  56. }
  57. // GetMonthStartAndEndTimestamp 获取当前月份的开始时间戳和结束时间戳
  58. func GetMonthStartAndEndTimestamp() (startTimestamp, endTimestamp int64) {
  59. // 获取当前时间
  60. now := time.Now()
  61. // 获取当前月份的第一天
  62. startOfMonth := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
  63. // 获取下一个月份的第一天,然后减去一秒,得到当前月份的最后一天
  64. endOfMonth := startOfMonth.AddDate(0, 1, 0).Add(-time.Second)
  65. // 转换为时间戳
  66. startTimestamp = startOfMonth.Unix()
  67. endTimestamp = endOfMonth.Unix()
  68. return startTimestamp, endTimestamp
  69. }
  70. // SubDays 计算两个日期(时间戳)之间的天数差
  71. func SubDays(startDay, endDay int64) int32 {
  72. s1 := time.Unix(startDay, 0)
  73. s2 := time.Unix(endDay, 0)
  74. return int32(s2.Sub(s1).Hours() / 24)
  75. }
  76. func TimeParseLocal(layout, dateTime string) (time.Time, error) {
  77. loc, _ := time.LoadLocation("Local")
  78. return time.ParseInLocation(layout, dateTime, loc)
  79. }
  80. func Substr(s string, start, length int) string {
  81. // 转换为rune切片以正确处理Unicode字符
  82. runes := []rune(s)
  83. l := start + length
  84. if l > len(runes) {
  85. l = len(runes)
  86. }
  87. return string(runes[start:l])
  88. }
  89. // FindMaxTime 辅助函数:获取多个时间中的最大值
  90. func FindMaxTime(times ...time.Time) time.Time {
  91. max := times[0]
  92. for _, t := range times[1:] {
  93. if t.After(max) {
  94. max = t
  95. }
  96. }
  97. return max
  98. }
  99. // FindMinTime 辅助函数:获取多个时间中的最小值
  100. func FindMinTime(times ...time.Time) time.Time {
  101. min := times[0]
  102. for _, t := range times[1:] {
  103. if t.Before(min) {
  104. min = t
  105. }
  106. }
  107. return min
  108. }
  109. func SaveUploadedFile(file *multipart.FileHeader, dst string) error {
  110. src, err := file.Open()
  111. if err != nil {
  112. return err
  113. }
  114. defer src.Close()
  115. out, err := os.Create(dst)
  116. if err != nil {
  117. return err
  118. }
  119. defer out.Close()
  120. _, err = io.Copy(out, src)
  121. return err
  122. }