util_more.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package util
  2. import (
  3. "bytes"
  4. "fmt"
  5. "math"
  6. "strconv"
  7. "strings"
  8. "time"
  9. )
  10. func CurrentMaxFrameId() int32 {
  11. currentHour := time.Now().Hour()
  12. return int32(math.Floor(float64(currentHour/2))) * 10
  13. }
  14. func ArrayInt32ToStrings(cowIds []int32, cutset string) string {
  15. var cows bytes.Buffer
  16. if len(cowIds) <= 0 {
  17. return cows.String()
  18. }
  19. for i, v := range cowIds {
  20. if i > 0 {
  21. cows.WriteString(cutset)
  22. }
  23. cows.WriteString(strconv.Itoa(int(v))) // 将整数转换为字符串
  24. }
  25. return cows.String()
  26. }
  27. // ConvertCowIdsToInt64Slice 将逗号拼接的字符串转换为 int64 切片
  28. func ConvertCowIdsToInt64Slice(input string) ([]int64, error) {
  29. // 如果输入为空,直接返回空切片
  30. if input == "" {
  31. return []int64{}, nil
  32. }
  33. // 按逗号分割字符串
  34. parts := strings.Split(input, ",")
  35. // 初始化结果切片
  36. result := make([]int64, 0, len(parts))
  37. // 遍历每个部分,转换为 int64
  38. for _, part := range parts {
  39. // 去除空格
  40. part = strings.TrimSpace(part)
  41. if part == "" {
  42. continue // 忽略空字符串
  43. }
  44. // 转换为 int64
  45. num, err := strconv.ParseInt(part, 10, 64)
  46. if err != nil {
  47. return nil, fmt.Errorf("invalid number: %s", part)
  48. }
  49. // 添加到结果切片
  50. result = append(result, num)
  51. }
  52. return result, nil
  53. }
  54. // GetMonthStartAndEndTimestamp 获取当前月份的开始时间戳和结束时间戳
  55. func GetMonthStartAndEndTimestamp() (startTimestamp, endTimestamp int64) {
  56. // 获取当前时间
  57. now := time.Now()
  58. // 获取当前月份的第一天
  59. startOfMonth := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
  60. // 获取下一个月份的第一天,然后减去一秒,得到当前月份的最后一天
  61. endOfMonth := startOfMonth.AddDate(0, 1, 0).Add(-time.Second)
  62. // 转换为时间戳
  63. startTimestamp = startOfMonth.Unix()
  64. endTimestamp = endOfMonth.Unix()
  65. return startTimestamp, endTimestamp
  66. }
  67. // SubDays 计算两个日期(时间戳)之间的天数差
  68. func SubDays(startDay, endDay int64) int32 {
  69. s1 := time.Unix(startDay, 0)
  70. s2 := time.Unix(endDay, 0)
  71. return int32(s2.Sub(s1).Hours() / 24)
  72. }
  73. func TimeParseLocal(layout, dateTime string) (time.Time, error) {
  74. loc, _ := time.LoadLocation("Local")
  75. return time.ParseInLocation(layout, dateTime, loc)
  76. }
  77. func Substr(s string, start, length int) string {
  78. // 转换为rune切片以正确处理Unicode字符
  79. runes := []rune(s)
  80. l := start + length
  81. if l > len(runes) {
  82. l = len(runes)
  83. }
  84. return string(runes[start:l])
  85. }