-
Notifications
You must be signed in to change notification settings - Fork 2
/
time_duration.go
86 lines (78 loc) · 2.2 KB
/
time_duration.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
package shared
import (
"encoding/json"
"github.com/iwind/TeaGo/types"
"time"
)
type TimeDurationUnit = string
const (
TimeDurationUnitMS TimeDurationUnit = "ms"
TimeDurationUnitSecond TimeDurationUnit = "second"
TimeDurationUnitMinute TimeDurationUnit = "minute"
TimeDurationUnitHour TimeDurationUnit = "hour"
TimeDurationUnitDay TimeDurationUnit = "day"
TimeDurationUnitWeek TimeDurationUnit = "week"
)
// TimeDuration 时间间隔
type TimeDuration struct {
Count int64 `yaml:"count" json:"count"` // 数量
Unit TimeDurationUnit `yaml:"unit" json:"unit"` // 单位
}
func (this *TimeDuration) Duration() time.Duration {
switch this.Unit {
case TimeDurationUnitMS:
return time.Duration(this.Count) * time.Millisecond
case TimeDurationUnitSecond:
return time.Duration(this.Count) * time.Second
case TimeDurationUnitMinute:
return time.Duration(this.Count) * time.Minute
case TimeDurationUnitHour:
return time.Duration(this.Count) * time.Hour
case TimeDurationUnitDay:
return time.Duration(this.Count) * 24 * time.Hour
case TimeDurationUnitWeek:
return time.Duration(this.Count) * 24 * 7 * time.Hour
default:
return time.Duration(this.Count) * time.Second
}
}
func (this *TimeDuration) Seconds() int64 {
switch this.Unit {
case TimeDurationUnitMS:
return this.Count / 1000
case TimeDurationUnitSecond:
return this.Count
case TimeDurationUnitMinute:
return this.Count * 60
case TimeDurationUnitHour:
return this.Count * 3600
case TimeDurationUnitDay:
return this.Count * 3600 * 24
case TimeDurationUnitWeek:
return this.Count * 3600 * 24 * 7
default:
return this.Count
}
}
func (this *TimeDuration) Description() string {
var countString = types.String(this.Count)
switch this.Unit {
case TimeDurationUnitMS:
return countString + "毫秒"
case TimeDurationUnitSecond:
return countString + "秒"
case TimeDurationUnitMinute:
return countString + "分钟"
case TimeDurationUnitHour:
return countString + "小时"
case TimeDurationUnitDay:
return countString + "天"
case TimeDurationUnitWeek:
return countString + "周"
default:
return countString + "秒"
}
}
func (this *TimeDuration) AsJSON() ([]byte, error) {
return json.Marshal(this)
}