1
This commit is contained in:
@@ -4,6 +4,8 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"git.rosy.net.cn/baseapi/utils"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -24,9 +26,113 @@ func TestPoiGetIDs(t *testing.T) {
|
||||
// t.Log(result)
|
||||
}
|
||||
|
||||
func TestTime(t *testing.T) {
|
||||
storeTime := "07:00-19:30"
|
||||
time2 := strings.Split(storeTime, ";")
|
||||
aa := int(time.Now().Weekday())
|
||||
if aa == 0 {
|
||||
aa = 7
|
||||
}
|
||||
if len(time2) == 1 {
|
||||
aa = 1
|
||||
}
|
||||
intervals, err := parseIntervals(time2[aa-1])
|
||||
if err != nil {
|
||||
fmt.Printf("解析错误: %v\n", err)
|
||||
return
|
||||
}
|
||||
|
||||
merged := mergeIntervals(intervals)
|
||||
|
||||
totalMinutes := 0
|
||||
for _, iv := range merged {
|
||||
totalMinutes += iv.end - iv.start
|
||||
}
|
||||
|
||||
hours := totalMinutes / 60
|
||||
mins := totalMinutes % 60
|
||||
|
||||
fmt.Printf("✅ 总营业时长: %d 小时 %d 分钟(共 %d 分钟)\n", hours, mins, totalMinutes)
|
||||
}
|
||||
|
||||
// timeToMinutes 将 "HH:MM" 转为当天第几分钟(0 ~ 1439)
|
||||
func timeToMinutes(t string) (int, error) {
|
||||
parts := strings.Split(t, ":")
|
||||
if len(parts) != 2 {
|
||||
return 0, fmt.Errorf("invalid time format: %s", t)
|
||||
}
|
||||
h, err := strconv.Atoi(parts[0])
|
||||
if err != nil || h < 0 || h > 23 {
|
||||
return 0, fmt.Errorf("invalid hour in %s", t)
|
||||
}
|
||||
m, err := strconv.Atoi(parts[1])
|
||||
if err != nil || m < 0 || m > 59 {
|
||||
return 0, fmt.Errorf("invalid minute in %s", t)
|
||||
}
|
||||
return h*60 + m, nil
|
||||
}
|
||||
|
||||
// parseIntervals 解析 "00:00-01:00,01:05-23:59" → []interval
|
||||
type interval struct {
|
||||
start, end int // minutes since 00:00
|
||||
}
|
||||
|
||||
func parseIntervals(s string) ([]interval, error) {
|
||||
var intervals []interval
|
||||
for _, seg := range strings.Split(s, ",") {
|
||||
seg = strings.TrimSpace(seg)
|
||||
if seg == "" {
|
||||
continue
|
||||
}
|
||||
parts := strings.Split(seg, "-")
|
||||
if len(parts) != 2 {
|
||||
return nil, fmt.Errorf("invalid interval format: %s", seg)
|
||||
}
|
||||
startMins, err := timeToMinutes(strings.TrimSpace(parts[0]))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
endMins, err := timeToMinutes(strings.TrimSpace(parts[1]))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if startMins > endMins {
|
||||
return nil, fmt.Errorf("start after end in interval: %s", seg)
|
||||
}
|
||||
intervals = append(intervals, interval{start: startMins, end: endMins})
|
||||
}
|
||||
return intervals, nil
|
||||
}
|
||||
|
||||
// mergeIntervals 合并重叠/相邻区间(如 [0,60], [65,1439] → 保留两个;若 [0,60], [60,120] → 可合并为 [0,120])
|
||||
func mergeIntervals(ints []interval) []interval {
|
||||
if len(ints) == 0 {
|
||||
return ints
|
||||
}
|
||||
// 排序
|
||||
sort.Slice(ints, func(i, j int) bool {
|
||||
return ints[i].start < ints[j].start
|
||||
})
|
||||
|
||||
merged := make([]interval, 0, len(ints))
|
||||
curr := ints[0]
|
||||
for i := 1; i < len(ints); i++ {
|
||||
if ints[i].start <= curr.end { // 重叠或紧邻(如 end=60, next.start=60 → 合并)
|
||||
if ints[i].end > curr.end {
|
||||
curr.end = ints[i].end
|
||||
}
|
||||
} else {
|
||||
merged = append(merged, curr)
|
||||
curr = ints[i]
|
||||
}
|
||||
}
|
||||
merged = append(merged, curr)
|
||||
return merged
|
||||
}
|
||||
|
||||
func Test1111(t *testing.T) {
|
||||
storeIds := []int64{
|
||||
12524795,
|
||||
31984867,
|
||||
}
|
||||
|
||||
for k, v := range storeIds {
|
||||
@@ -252,7 +358,7 @@ func TestPoiSettleSettlementList(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCommentScore(t *testing.T) {
|
||||
result, err := api.CommentScore("11182878")
|
||||
result, err := api.CommentScore("31984867")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user